大家帮忙看看这个C++程序,编译通过了,但结果却无限循环,问题出在哪,谢谢大家!

根据读入的数据构造有向图G,并输出G的DFS遍历序列(从V0开始),图的输入形式为n V0 Vi0 V1 Vi1 V2Vi2...Vi Vin -1 -1(-1,-1为输入结束标记,其余的值都>=0且<n),它们都是整数,且100>n>0

# include <stdio.h>
# include <stdlib.h>

int G[100][100];
int n;

void createG()
{
int i,j;
printf("请输入图的顶点数:");
scanf("%d",&n);
printf("\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
G[i][j]=0;
do
{
scanf("%d %d",&i,&j);
G[i][j]=1;
}while((i!=-1)&&(j!=-1));
}

void topsort()
{
int i,j;
int degree[100];
bool visit[100],flag=true;
printf("拓扑排序序列为:\n");
for(i=0;i<n;i++)
{
degree[i]=0;
visit[i]=false;
}
printf("\n");
while(flag=true)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
degree[i]=G[j][i]+degree[i];
i=0;
while((i<n)&&(degree[i]!=0)||(visit[i]==true))
i++;
if(i<n)
{
printf("%d",i);
visit[i]==true;
for(j=0;j<n;j++)
{
G[i][j]=0;
degree[j]=0;
}
}
else flag=false;
}
}

void main()
{
createG();
topsort();
system("PAUSE");
}

我给你看了看,感觉你的输入函数有问题,就是do
{
scanf("%d %d",&i,&j);
G[i][j]=1;
}while((i!=-1)&&(j!=-1));这句有些问题。你没有对i,j进行改变,也就是G[i][j]是没有变化的
温馨提示:内容为网友见解,仅供参考
无其他回答

C++,大佬们看下这里报错是为什么?可是这代码能AC啊?!
rep 是 repeat 的缩写,使用的时候只需要 rep(i, a, b)就可以代替冗长的 for 循环的编写,其中 i 是循环变量,a 和 b 分别是循环的上下界,注意是左闭右开区间。Rep 也是同样的逻辑,只不过是倒序的循环。foreach 使用的是 C++11 的新特性,可以实现自动迭代,用的不多,在一些场景下非常方便...

visual c++ 6.0中写好源程序后编译的时候有错误,怎么找错误的位置?_百 ...
打开错误列表窗口,路径:视图->其他窗口->错误列表 按F7编译,如果有错误会在错误列表中展示出来,鼠标双击错误项就会 跳转到对应的行。不过有些链接错误无法跳转不过根据错误信息能找到相应的函数或文件

c++中for循环为何提前退出..实在找不出原因...
我怀疑是你的数据的问题。因为只有当星期为3的时候,才会执行下面这段程序,而这段程序是需要从文件中读数据的。当为其他的时候,是不会读文件中的这些数据的。else { infile>>cse[i].CName>>cse[i].WhenStart>>cse[i].WhenEnd>>cse[i].WeekStart>>cse[i].WeekEnd>>cse[i].Teacher>>cse[...

运行C++程序时窗口一闪而过,看不见结果
你的程序是不是没有输入什么的,只是 一些 固定值的操作,因为计算机运行速度的关系...当然是一闪而过...加 头文件 <stdlib.h> 然后再 return 之前 加上 system("pause")\/\/这是调用系统 操作,这句话是现实系统信息,这样的话,程序会在这条语句上运行 在DOS界面显示系统信息,达到了暂停的作用...

请大家帮忙看看下面的C++程序,为什么 cout<<stu.name<<endl 会报错呢...
因为std::string这个类型需要 include <string> \/\/ 文件名没有后缀的h iostream中仅仅含有string的声明, 而没有定义

大哥大姐帮忙看这是什么问题~~~ 谢谢了
不知你出现过类似这样的故障吗?(0x后面内容有可能不一样。) 散一般出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。 1、微软IE缓冲溢出漏洞引起 2、内存或虚拟内存地址使用冲突造成程序的运行需要分配一定的内存地址给程序使用,当程序结束时释放留出空间让给新的程序使用,win是...

笔记本上装了C++,有时候按照书本上的编程语句写,总是显示错误,怎么办...
这位同学,你和我当时学习C++的情况一样啊,呵呵。不是笔记本的毛病,也不是编译器的问题,也不是课本上的程序不正确。原因其实很简单,你把程序中所有的符号(如逗号、分号、引号、括号)全都换成英文输入法状态下的符号就好了,中文输入法状态下的英文符号是不行的,即时有一个符号是中文输入法下的...

C++字符串小问题,请大家帮个忙,很简单
a的长度不用传递;void main(){ char a[30]="abc",b[]="efg";strcat(a,b);printf("%s\\n",a);} 结果输出 abcefg 你那函数返回的只能是个char类型的数据,你返回了个char[30],这是不能实现的,c[30]只在子函数里存在,i不用再加1了,第一个for循环后,i已经是字符尾部了。

电脑里有好多的C++,大家帮忙看看哪些是没用的想删掉(电脑是64位win7...
没事你别乱删,可以用优化大师或者超级兔子清理一下。或者你截图出来看看,有些是应用程序,删掉了有可能导致系统不稳定甚至崩溃。

怎样用visual c++查看用c++写的程序生成的汇编级代码
使用debug 举个例子,在你想要让程序停下来的那行代码,点右键,选择“添加一个断点(breakpoint)”。然后在debug菜单里面点击,go,就可以进入debug,然后可以在汇编窗口里看到对应的汇编代码了。当然debug很强大,作用很多,一言难尽,可以去找相关资料看看。

相似回答