그림 의 조작 --- 건설 도, DFS, BFS 스 트 리밍 도
                                            
 49421 단어  데이터 구조
                    
#include(2) 저장 구조
typedef struct ENode{
 vertex V1,V2;
}*Edge;
typedef struct GNode{
 int Nv;
 int Ne;
 int G[MaxSize][MaxSize];
}*MGraph;(3) 주 함수
int main(){
 int N,E;
 MGraph Graph;
 scanf("%d%d",&N,&E); //        
 Graph=InitGraph(N);  //    
 Graph=CreateGraph(Graph,E);//   
 total_DFS(Graph); //DFS  
 total_BFS(Graph);//BFS  
 return 0;
}(4) 그림 초기 화
MGraph InitGraph(int N){   
MGraph Graph;
 Graph=(MGraph)malloc(sizeof(struct GNode));
 Graph->Nv=N;  //   
 Graph->Ne=0;  //       0
 int V,W;
 for(V=0;V<Graph->Nv;V++)
 for(W=0;W<Graph->Nv;W++)
   Graph->G[V][W]=0;
 for(V=0;V<Graph->Nv;V++){
   Visited_DFS[V]=0;  //     
   Visited_BFS[V]=0;  //     
  }
  return Graph;
}삽입 변
void InsertEdge(MGraph Graph,Edge E){
 Graph->G[E->V1][E->V2]=1;
 Graph->G[E->V2][E->V1]=1;
}구조 도
MGraph CreateGraph(MGraph Graph,int Ne){   
 Graph->Ne=Ne;
 Edge E;
  if(Graph->Ne!=0){
  E=(Edge)malloc(sizeof(struct ENode));
  for(int i=0;i<Graph->Ne;i++){
   scanf("%d %d",&E->V1,&E->V2);
   InsertEdge(Graph,E);
  }
 }
  return Graph;
}DFS 옮 겨 다 니 기
void DFS(MGraph Graph,vertex V){
  printf(" %d",V);
  Visited_DFS[V]=1;
  vertex W;
  for(W=0;W<Graph->Nv;W++)
   if(!Visited_DFS[W]&&Graph->G[V][W]==1)
   DFS(Graph,W);
}
void total_DFS(MGraph Graph){
 vertex V;
 for(V=0;V<Graph->Nv;V++){
  if(Visited_DFS[V]==0)
  { printf("{");
   DFS(Graph,V);
   printf(" }");
   printf("
");}
 }
}BFS 옮 겨 다 니 기
void BFS(MGraph Graph,vertex V){  
 Queue Q;
 Q=InitQ();
 AddQ(Q,V);
 Visited_BFS[V]=1;
 printf(" %d",V);
 vertex W;
 while(!IsEmpty(Q)) {
  V=DeleteQ(Q);
 for(W=0;W<Graph->Nv;W++){
  if(!Visited_BFS[W]&&Graph->G[V][W]==1){
   printf(" %d",W);
   AddQ(Q,W);
   Visited_BFS[W]=1;
    }
 }
 }
}     우 리 는 여기에 대열 을 짓 고, 대열 을 나 가 고, 대열 에 들 어 가 는 조작 대열 의 유형 정 의 를 진행 해 야 한다.
typedef struct QNode{
 int Data[10];
 int front;
 int rear;
}*Queue; 초기 화
Queue InitQ(){
 Queue Q;
 Q=(Queue)malloc(sizeof(struct QNode));
 Q->front=Q->rear=0;
 return Q;
}
//        
int IsEmpty(Queue Q){
 return Q->front==Q->rear;
}대열 에 들어가다
void AddQ(Queue Q,vertex V){
 if((Q->rear+1)%MaxSize!=Q->front)
 {   Q->rear=(Q->rear+1)%MaxSize;
  Q->Data[Q->rear]=V;
 }
}대열 에 나가다
int DeleteQ(Queue Q){
 if(Q->front==Q->rear) return -1;
 else {
  Q->front=(Q->front+1)%MaxSize;
  return Q->Data[Q->front];
 }
}전체 코드
#include
");}
    }
}
void BFS(MGraph Graph,vertex V){  
 Queue Q;
 Q=InitQ();
 AddQ(Q,V);
 Visited_BFS[V]=1;
 printf(" %d",V);
 vertex W;
 while(!IsEmpty(Q)) {
  V=DeleteQ(Q);
 for(W=0;W<Graph->Nv;W++){
  if(!Visited_BFS[W]&&Graph->G[V][W]==1){
   printf(" %d",W);
   AddQ(Q,W);
   Visited_BFS[W]=1;
    }
 }
 }
}     
void total_BFS(MGraph Graph){
 vertex V;
 for(V=0;V<Graph->Nv;V++){
  if(Visited_BFS[V]==0)
  { printf("{");
   BFS(Graph,V);
   printf(" }");
   printf("
");}
   }
}
int main(){
 int N,E;
 MGraph Graph;
 scanf("%d%d",&N,&E);
 Graph=InitGraph(N);
 Graph=CreateGraph(Graph,E);
 total_DFS(Graph);
 total_BFS(Graph);
 return 0;
 }이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.