首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新人求教,关于建立图的临接表解决办法

2013-01-05 
新人求教,关于建立图的临接表#includestdio.h#includestdlib.h#define MAX_vertex_num 100int visited

新人求教,关于建立图的临接表
#include"stdio.h"
#include"stdlib.h"

#define MAX_vertex_num 100
int visited[MAX_vertex_num];
typedef struct arcnode{
int adjvex;
arcnode * nextarc;
}arcnode,*arcc;

typedef struct vexnode{
char data;
arcnode *firstarc;
}vexnode;

typedef vexnode Adjlist[MAX_vertex_num];
typedef struct graph{
int vexnum;
int arcnum;
Adjlist adjlist;
}graph,*graphh;


int creategraph(graph *g){

printf("建立无向图:\n");
printf("输入顶点数和边数:\n");
scanf("%d%d",&g->vexnum,&g->arcnum);
printf("建立节点表:\n");
for(int k=0;k<g->vexnum;k++){
g->adjlist[k].data=getchar();//为什么这里循环的次数和g->vexnum的次数不同,我输入的节点
                                            是6个,但是执行了3次就跳除了循环???
g->adjlist[k].firstarc=0;
}
printf("建立边表:\n");
int m,n;
arcnode *s;
for(int q=0;q<g->arcnum;q++){
printf("输入有序对:\n");
scanf("%d",&n);
scanf("%d",&m);
s=(arcnode *)malloc(sizeof(arcnode));
s->adjvex=n;
s->nextarc=g->adjlist[m].firstarc;
g->adjlist[m].firstarc=s;
s->adjvex=m;
s->nextarc=g->adjlist[n].firstarc;
g->adjlist[n].firstarc=s;
}
return 0;
}




void DFS(graph *g,int i){
visited[i]=1;
printf(" %c ",g->adjlist[i].data);
arcc s;
for(s=g->adjlist[i].firstarc;s!=0;s=s->nextarc){
if(visited[s->adjvex]!=1)DFS(g,s->adjvex);
}

}




int main(){
graph *g;
g=(graph *)malloc(sizeof(graph));
creategraph(g);
for(int i=0;i<g->vexnum;i++)visited[i]=0;
for( i=0;i<g->vexnum;i++){
if(visited[i]!=1)DFS(g,i);
}
return 0;
}


[解决办法]
g->adjlist[k].data=getchar();
后面加上fflush(stdin);  清除缓冲区的空格
头文件#include<stdlib.h>

热点排行