그림의 고리의 수를 구하다

2229 단어
이 프로그램은 컴파일만 끝났을 뿐 디버깅을 한 적이 없다.결과는 링을 형성하는 경로만 저장하고 최종 선별을 하지 않았다.
첫 번째 단계: 그림을 matrix로 표시하고,예: 1, 2, 3, 4, 5, 6, 7, 8 matrix=[                        1          0  1  1  1  0  0  0  0 2          1  0  1  0  0  0  0  0 3          1  1  0  1  0  0  0  0 4          1  0  1  0  1  0  0  0 5          0  0  0  1  0  1  1  1 6          0  0  0  0  1  0  1  1 7          0  0  0  0  1  1  0  1 8          0  0  0  0  1  1  1  0            ]
2단계: 변수 정의: typedef struct {int data[MAX]; int length;}Node;//노드의 데이터 구조는 노드 번호가 0,1,2,3.   List *qNode;//중간 경로 저장을 위한 List *cirNodes;//이미 링이 된 경로 int**matrix 저장하기;
3단계: 몇 가지 중요한 방법을 정의합니다.
3. 정의 방법: ① void findNextPos(Node *currNode, int **m, int rows);//currNode->data[currNode->length]에 대해 다음 연결된 노드를 검사한다(currNode->data[currNode->length-1]와 같지 않다).//만약 이러한 점이 존재한다면 새 노드를 만들고 원래의currNode를 복사하며 새 노드 newNode의 제length+1개 위치에 찾은 점을 삽입하고length++;그렇지 않으면 노드를 해제합니다.//isAcircle(newNode)을 호출합니다.//circle의 경우 노드를 cirNodes에 넣고, 그렇지 않으면 qNode에 넣습니다.   ②  bool isAcircle(Node *currNode);//마지막 문자가 앞의 문자와 중복되는지 확인하고circle인지 확인합니다.
4. 기본 구현:
bool isNotVisited(int *table,int rows,int *curr){
          int i;
          for(i=0;ilength<2) return false;
        int depot=currNode->data[currNode->length-1];
        int i;
        for(i=length-2;i>=0;i--){
            if(currNode->data[i]==depot)
                 return true;
        }
        return false;
   }
   Node* generateANode(Node *curr,int nextdepot){
        Node * cloneNode =(Node*)malloc(sizeof(Node));
        cloneNode->length=curr->length+1;
        int i;
        for(i=0;ilength;i++){
            cloneNode->data[i]=curr->data[i];
        }
        cloneNode->data[i+1]=nextdepot;
        return cloneNode;
   }
   void findNextPos(Node *currNode,int **m,int rows){
        int depot = currNode->data[currNode->length-1];
        int lastDepot=-1;
        if((currNode->length)>1) lastDepot=currNode->data[currNode->length-2];
        int i;
        for(i=0;i

좋은 웹페이지 즐겨찾기