#define MAX 50 #include<alloc.h> #include<stdlib.h> strcut HNODmat[MAX]; strcut LNOD { int adjvex; int info; int *nextarc; }; struct HNOD { int vexdata; int firstarc; }; void adjlist(int n) { LONDE *p; int i,k,u,v,w; for(i=1;i<=n;i++) { mat[i].vexdata=i; mat[i].firstarc=NULL; } printf("请输入有关系的节点编号:\n"); do { printf("u,v,w="); scanf("%d,%d,%d",&u,&v,&w); p=(LNODE *)malloc(sizeof(LNODE)); if(p==NULL) exit(1); else { p->adjvex=v; p=->info=w; p->=nextarc=mat[u].firstarc; mat[u].firstarc=p; } }while(0<u&&u<=n&&0<v&&v<=n); } void dfs(int v) { int w; LNODE *p=NULL; mat[v].vexdata=0; p=mat[v].firstarc; while(P!=NULL) { w=p->adjvex; if(mat[w].vexdata!=0) {printf("<%d,%d>\t,v,w); dfs(w); } p=p->nextarc; } } void bfirst(queuetype *qu,int v) { int w,y; LNODE *p; mat[v].vexdata=0; enqueue(qu,v); while ((y=dequeue(qu))!=0) { p=mat[y].firstarc; while(p!=NULL) { w=p->adjvex; if(mat[w].vexdata!=0) { printf("(%d,%d)\t",y,w); mat[w].vexdata=0; enqueue(qu,w); } p=->nextarc; } } }
main() { int n; printf(":请输入图的节点数:\n"); scanf("%d",&n); adjlist(n); printf("请选择需要的遍历方式:\n,1:深度优先搜索,2:广度优先搜索\n"); char s[20]; for(; ;) { scanf("%s",&s); if(s[0]!=49&&s[0]!=50) { printf("对不起,你输入的方式不对,请重新输入\n"); printf("请选择需要的遍历方式:\n,1:深度优先搜索,2:广度优先搜索\n"); } if(s[0]==49); { dfs(int n); break; } if(s[0]==50) { bfirst(queuetype *qu,int n); break; } } printf("谢谢使用\n"); }