데이터 구조 와 알고리즘 (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 학생 들 이 문자열 을 공부 하 는 부분 에서 한 실험 입 니 다. 여러분 들 이 참고 하 시기 바 랍 니 다.저 는 罡 罡 동창 입 니 다.☜(ˆ▽ˆ) (미 친 암시 좋아요! 관심! 리 트 윗!! 좋아요! 관심! 리 트 윗!!) 당신 의 지 지 는 罡 罡 학우 가 전진 하 는 가장 큰 동력 입 니 다!

좋은 웹페이지 즐겨찾기