这是我为此编写的代码 HackerEarth Problem在我的代码中,如果我删除 printf 语句和嵌套 for 循环,那么我会得到正确的输出,但如果保留它们,我会得到错误的答案。代码中有什么问题??
请帮我解决这个问题
#include <stdio.h>
int flag=0;
int main()
{
int test;
scanf("%d",&test);
while(test--)
{
int var=0,rel=0;
scanf("%d %d",&var,&rel);
int arr[var+1][10005];
int not[rel][2];
int n1,n2,n=0,i;
char s[3];
flag=0;
for(i=0;i<var+1;i++)
{
int j=0;
for(j=0;j<10005;j++)
{
arr[i][j]=0;
}
}
for(i=0;i<rel;i++)
{
not[i][0]=0;
not[i][1]=0;
}
for(i=0;i<rel;i++)
{
scanf("%d %s %d",&n1,s,&n2);
if(s[0]=='=')
{
arr[n1][(arr[n1][0]++)+1]=n2;
arr[n2][(arr[n2][0]++)+1]=n1;
}
else
{
not[n][0]=n1;
not[n][1]=n2;
n++;
}
}
int j;
***/*Problem Is With This For Loops and Print Statements*/
for(i=0;i<var+1;i++)
{
for(j=0;j<10;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
/*Upto This Point*/***
int visit[var];
for(i=0;i<n;i++)
{
flag=0;
dfs(arr,visit,not[i][0],not[i][1]);
if(flag==1)
{
printf("NO\n");
break;
}
}
if(flag==0)
{
printf("YES\n");
}
for(i=0;i<var+1;i++)
{
arr[i][0]=0;
}
}
}
void dfs(int arr[][10005],int visit[],int start,int find)
{
if(arr[start][0]==0 || visit[start]==1)
return;
visit[start]=1;
while(arr[start][0]!=0)
{
int next=arr[start][arr[start][0]];
arr[start][0]--;
if(next==find)
{
flag=1;
}
dfs(arr,visit,next,find);
}
}
最佳答案
visit
数组是罪魁祸首。
它是一个未初始化的自动变量(在堆栈上分配)。
dfs
中的首要任务是读取它。
因此,dfs
的输出及其flag
的值是随机的!
您认为有影响的代码块只是更改堆栈的内容,并且如果代码在其中,它就会“碰巧”起作用。
因此,请在调用dfs
之前初始化visit
。
关于c - 代码中使用 Printf 语句和 For 循环的困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37097659/