//bfs后续补充; #include <stdio.h> #include <string.h> #define N 100 /* 需要: 1.定义顶点数据类型;//一开始便申请n个数据空间来存放顶点数据; 2.定义边数据类型;//每次多一条边的时候再申请一个空间 */ typedef struct E { //边 int number; char e; E *next; }E; typedef struct V { //顶点 int number; char v; E *next; }V;V v[N]; int vnumber,enumber; //以邻接表为数据结构创建图; int Search(char x) { for(int i=0;i<vnumber;i++) if(v[i].v==x) return i; return -1; } void Creat() { int i,j; printf("请输入顶点个数与边的个数:\n"); scanf("%d %d",&vnumber,&enumber);getchar(); printf("请输入每个顶点的信息:\n"); for(i=0;i<vnumber;i++) {scanf("%c",&v[i].v);v[i].number=Search(v[i].v);v[i].next=NULL;}getchar();//吸收最后的回车; //这里由于边还未定义,故省去初始化边的一部。但是需要初始化顶点的next指针为NULL; printf("请输入每条边的信息:\n"); char x,y;int a,b; for(i=0;i<enumber;i++) { scanf("%c %c",&x,&y);getchar(); a=Search(x);b=Search(y);//从顶点数组v[]中寻找坐标返回; //第一个: E *p1=new E; p1->number=b;p1->e=y; p1->next=v[a].next;v[a].next=p1; //将新生成的结点加入顶点a的边表头部; //第二个: E *p2=new E; p2->number=a;p2->e=x; p2->next=v[b].next;v[b].next=p2; } printf("创建连接表图成功!\n"); } int vis[N]; void dfs(int number) { //深度优先遍历; printf("%c ",v[number].v);vis[number]=1; E *p=v[number].next; while(p!=NULL) { int m=p->number;//表示顶点m访问过; if(vis[m]==0) dfs(m);//如果m个顶点没有访问过,则访问其邻接点; p=p->next; } } void bfs() { //后续补充; } int main() { vnumber=enumber=0; Creat(); for(int i=0;i<N;i++) vis[i]=0; dfs(0);//从第0个顶点开始访问; for(int i=0;i<N;i++) vis[i]=0; bfs(); return 0; }