데이터 구조 와 알고리즘 (C 언어) - 그림 의 두 가지 옮 겨 다 니 기 (DFS 와 BFS)
31959 단어 데이터 구조
(좋아요 누 르 고 팔 로 우 하 세 요) 코드 가 제대로 작 동 하지 못 해서 고민 하고 있 습 니 다.만약 에 이 글 이 당신 에 게 그렇게 잃 어 버 린 도움 이 된다 고 생각한다 면 칭찬 을 누 르 고 리 트 윗 에 관심 을 가 져 주세요.
후속 글 은 데이터 구조 에 관 한 기초 실험 으로 본인 은 모두 성공 적 으로 운영 되 었 습 니 다. 문제 가 있 으 면 댓 글 에 남 겨 주세요.
당신 의 지 지 는 32609 학생 들 이 전진 하 는 가장 큰 동력 입 니 다!(미 친 암시 좋아요! 팔 로 우! 리 트 윗!! 좋아요! 팔 로 우! 리 트 윗!!)
그림 에 대한 두 가지 옮 겨 다 니 기 (DFS 와 BFS) 코드
쓸데없는 소리 하지 말고 코드 로 바로 올 려 주세요. 첫 번 째 BFS 방울:
#include
#include
#define max 20
typedef struct EdgeNode//
{ int adjvex; // , ,
struct EdgeNode *next;//
int weight; // ( )
}EdgeNode;
typedef struct VertexNode//
{ char data;//
EdgeNode *firstedge;//
}VertexNode;
typedef struct
{ VertexNode adjlist[max];
int n,e;
}GraphAdjlist;//
int visited[max];// ( 1, 0)
void create(GraphAdjlist *G)//
{ int i,j,k;
EdgeNode *e;
printf(" :");
scanf("%d%d",&G->n,&G->e);
getchar();//
printf(" :
");
for(i=0;i<G->n;i++)
{ scanf("%c",&G->adjlist[i].data);//
G->adjlist[i].firstedge=NULL;//
getchar();
}
for(k=0;k<G->e;k++)
{ printf(" (Vi,Vj) :
");
scanf("%d%d",&i,&j);// , ,
/* */
e=(EdgeNode *)malloc(sizeof(EdgeNode));
e->adjvex=j;
e->next=G->adjlist[i].firstedge;
G->adjlist[i].firstedge=e;
e=(EdgeNode *)malloc(sizeof(EdgeNode));// ,
e->adjvex=i;
e->next=G->adjlist[j].firstedge;
G->adjlist[j].firstedge=e;
}
printf("
");
}
void BFS(GraphAdjlist *G,int v)
{ EdgeNode *p;
int queue[max],front=0,rear=0;//
int w,i;
for(i=0;i<G->n;i++)//
visited[i]=0;
printf("%2c",G->adjlist[v].data);
visited[v]=1;
rear=(rear+1)%max;
queue[rear]=v;
while(front!=rear)
{ front=(front+1)%max;
w=queue[front];
p=G->adjlist[w].firstedge;
while(p!=NULL)
{ if(visited[p->adjvex]==0)
{ printf("%2c",G->adjlist[p->adjvex].data);
visited[p->adjvex]=1;
rear=(rear+1)%max;
queue[rear]=p->adjvex;
}
p=p->next;
}
}
printf("
");
}
int main()
{ GraphAdjlist G;
create(&G);
printf(" :");
BFS(&G,0);
return 0;
}
두 번 째 DFS 방울:
#include
#include
typedef struct EdgeNode//
{ int adjvex; // , ,
struct EdgeNode *next;//
int weight; // ( )
}EdgeNode;
typedef struct VertexNode//
{ char data;//
EdgeNode *firstedge;//
}VertexNode;
typedef struct
{ VertexNode adjlist[20];
int n,e;
}GraphAdjlist;//
int visited[10];// ( 1, 0)
void create(GraphAdjlist *G)//
{ int i,j,k;
EdgeNode *e;
printf(" :");
scanf("%d%d",&G->n,&G->e);
getchar();//
printf(" :
");
for(i=0;i<G->n;i++)
{ scanf("%c",&G->adjlist[i].data);//
G->adjlist[i].firstedge=NULL;//
getchar();
}
for(k=0;k<G->e;k++)
{ printf(" (Vi,Vj) :
");
scanf("%d%d",&i,&j);// , ,
/* */
e=(EdgeNode *)malloc(sizeof(EdgeNode));
e->adjvex=j;
e->next=G->adjlist[i].firstedge;
G->adjlist[i].firstedge=e;
e=(EdgeNode *)malloc(sizeof(EdgeNode));// ,
e->adjvex=i;
e->next=G->adjlist[j].firstedge;
G->adjlist[j].firstedge=e;
}
printf("
");
}
void DFS(GraphAdjlist *G,int i)
{ EdgeNode *p;
visited[i]=1;
printf("%c ",G->adjlist[i].data);
p=G->adjlist[i].firstedge;
while(p!=NULL)
{ if(visited[p->adjvex]==0)
DFS(G,p->adjvex);
p=p->next;
}
}
void DFSTraverse(GraphAdjlist *G)
{ int i;
for(i=0;i<G->n;i++)
visited[i]=0;
for(i=0;i<G->n;i++)
if(visited[i]==0)
DFS(G,i);
}
int main()//A B C D E
{ GraphAdjlist G;
create(&G);
printf(" :");
DFSTraverse(&G);
return 0;
}
이상 은 바로 32609 학생 들 이 문자열 을 공부 하 는 부분 에서 한 실험 입 니 다. 여러분 들 이 참고 하 시기 바 랍 니 다.저 는 罡 罡 동창 입 니 다.☜(ˆ▽ˆ) (미 친 암시 좋아요! 관심! 리 트 윗!! 좋아요! 관심! 리 트 윗!!) 당신 의 지 지 는 罡 罡 학우 가 전진 하 는 가장 큰 동력 입 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.