求问C语言大神,为什么我这个无向图建立出来有问题,哪位大神帮我调试一下,感激不尽!!!!!!!
#include<stdio.h>typedefcharVertexType;typedefintEdgeType;typedefintBoolean;#defineTR...
#include<stdio.h>
typedef char VertexType ;
typedef int EdgeType ;
typedef int Boolean ;
#define TRUE 1
#define FALSE 0
#define MAXVEX 100
#define INFINITY 65535
typedef struct{
VertexType vexs[MAXVEX] ;
EdgeType arc[MAXVEX][MAXVEX] ;
int numVertexes , numEdges ;
}MGraph ;
Boolean visited[MAXVEX] ;
//函数声明
void CreateGraph( MGraph *G );
void DFS( MGraph G , int i );
void DFSTraversal( MGraph G );
//主函数
int main(){
MGraph G ;
CreateGraph( &G ) ;
printf("DFS遍历\n") ;
DFSTraversal( G ) ;
return 0 ;
}
//函数operation
void CreateGraph( MGraph *G ){
int i,j,k,w ;
printf("无向图\n输入顶点数,边数:") ;
scanf("%d,%d",&G->numVertexes,&G->numEdges) ;
for( j = 0 ; j<G->numVertexes ; j++ ){
scanf("%c",&G->vexs[j]) ;
}
for( i = 0 ; i<G->numVertexes ; i++ ){
for( j = 0 ; j < G->numVertexes ; j++){
G->arc[i][j] = INFINITY ;
}
}
printf("输入(vi,vj)及权值w\n") ;
for( k = 0 ; k<G->numEdges ; k++ ){
scanf("%d %d %d",&i,&j,&w) ;
G->arc[i][j] = w ;
G->arc[j][i] = G->arc[i][j] ;
}
}
void DFS( MGraph G , int i ){
int j = 0;
visited[i] = TRUE ;
printf("%c ", G.vexs[i] ) ;
for( j = 0 ; j < G.numVertexes ; j++ ){
if( G.arc[i][j] != INFINITY && !visited[j])
DFS( G , j ) ;
}
}
void DFSTraversal( MGraph G ){
int i ;
for( i = 0; i<G.numVertexes ; i++ ){
visited[i] = FALSE ;
}
for( i = 0; i<G.numVertexes ; i++ ){
if( !visited[i] ){
DFS(G,i) ;
}
}
}
主要就是scanf("%c",&G->vexs[j]) ;这一步读不了数据 不知道为什么??? 展开
typedef char VertexType ;
typedef int EdgeType ;
typedef int Boolean ;
#define TRUE 1
#define FALSE 0
#define MAXVEX 100
#define INFINITY 65535
typedef struct{
VertexType vexs[MAXVEX] ;
EdgeType arc[MAXVEX][MAXVEX] ;
int numVertexes , numEdges ;
}MGraph ;
Boolean visited[MAXVEX] ;
//函数声明
void CreateGraph( MGraph *G );
void DFS( MGraph G , int i );
void DFSTraversal( MGraph G );
//主函数
int main(){
MGraph G ;
CreateGraph( &G ) ;
printf("DFS遍历\n") ;
DFSTraversal( G ) ;
return 0 ;
}
//函数operation
void CreateGraph( MGraph *G ){
int i,j,k,w ;
printf("无向图\n输入顶点数,边数:") ;
scanf("%d,%d",&G->numVertexes,&G->numEdges) ;
for( j = 0 ; j<G->numVertexes ; j++ ){
scanf("%c",&G->vexs[j]) ;
}
for( i = 0 ; i<G->numVertexes ; i++ ){
for( j = 0 ; j < G->numVertexes ; j++){
G->arc[i][j] = INFINITY ;
}
}
printf("输入(vi,vj)及权值w\n") ;
for( k = 0 ; k<G->numEdges ; k++ ){
scanf("%d %d %d",&i,&j,&w) ;
G->arc[i][j] = w ;
G->arc[j][i] = G->arc[i][j] ;
}
}
void DFS( MGraph G , int i ){
int j = 0;
visited[i] = TRUE ;
printf("%c ", G.vexs[i] ) ;
for( j = 0 ; j < G.numVertexes ; j++ ){
if( G.arc[i][j] != INFINITY && !visited[j])
DFS( G , j ) ;
}
}
void DFSTraversal( MGraph G ){
int i ;
for( i = 0; i<G.numVertexes ; i++ ){
visited[i] = FALSE ;
}
for( i = 0; i<G.numVertexes ; i++ ){
if( !visited[i] ){
DFS(G,i) ;
}
}
}
主要就是scanf("%c",&G->vexs[j]) ;这一步读不了数据 不知道为什么??? 展开
2个回答
展开全部
测试结果:
无向图
输入顶点数,边数(两个数据之间要带逗号):3,2
abc
输入(vi,vj)及权值w
0 1 5
0 2 10
DFS遍历
a b c
#include<stdio.h>
typedef char VertexType ;
typedef int EdgeType ;
typedef int Boolean ;
#define TRUE 1
#define FALSE 0
#define MAXVEX 100
#define INFINITY 65535
typedef struct
{
VertexType vexs[MAXVEX] ;
EdgeType arc[MAXVEX][MAXVEX] ;
int numVertexes , numEdges ;
}MGraph ;
Boolean visited[MAXVEX] ;
//函数声明
void CreateGraph( MGraph *G );
void DFS( MGraph G , int i );
void DFSTraversal( MGraph G );
//主函数
int main()
{
MGraph G ;
CreateGraph( &G ) ;
printf("DFS遍历\n") ;
DFSTraversal( G ) ;
return 0 ;
}
//函数operation
void CreateGraph( MGraph *G )
{
int i,j,k,w ;
//原代码printf("无向图\n输入顶点数,边数:") ;
printf("无向图\n输入顶点数,边数(两个数据之间要带逗号):") ;
scanf("%d,%d",&G->numVertexes,&G->numEdges) ;
//输入顶点字符的问题:
//假设顶点数是3,边数是2,顶点字符是abc
//当j=0, G->vexs[0]错误地吸收了上个语句的回车符'\n'
//导致G->vexs[0]='\n',G->vexs[1]='a',G->vexs[2]='b',
//漏掉了字符'c'
//解决方案1: 增加函数getchar(),用于吸收回车符'\n'
//解决方案2: 增加函数fflush(stdin),用于清空输入缓存,吸收掉回车符'\n'
//注意,有的编译器不能识别fflush(stdin)
fflush(stdin); //解决方案2,用于清空输入缓存,吸收掉回车符'\n'
for( j = 0 ; j<G->numVertexes ; j++ )
{
scanf("%c",&G->vexs[j]) ;
}
//解决方案3,先用数组保存输入的字符串
//char vertStr[MAXVEX];
//printf("请输入%d个顶点字符: ",G->numVertexes);
//scanf("%s",vertStr);
//for( j = 0 ; j<G->numVertexes ; j++ )
//{
// G->vexs[j]=vertStr[j];
//}
for( i = 0 ; i<G->numVertexes ; i++ )
{
for( j = 0 ; j < G->numVertexes ; j++)
{
G->arc[i][j] = INFINITY ;
}
}
printf("输入(vi,vj)及权值w\n") ;
for( k = 0 ; k<G->numEdges ; k++ )
{
scanf("%d %d %d",&i,&j,&w) ;
G->arc[i][j] = w ;
G->arc[j][i] = G->arc[i][j] ;
}
}
void DFS( MGraph G , int i )
{
int j = 0;
visited[i] = TRUE ;
printf("%c ", G.vexs[i] ) ;
for( j = 0 ; j < G.numVertexes ; j++ )
{
if( G.arc[i][j] != INFINITY && !visited[j])
DFS( G , j ) ;
}
}
void DFSTraversal( MGraph G )
{
int i ;
for( i = 0; i<G.numVertexes ; i++ )
{
visited[i] = FALSE ;
}
for( i = 0; i<G.numVertexes ; i++ )
{
if( !visited[i] )
{
DFS(G,i) ;
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询