c - 代码中使用 Printf 语句和 For 循环的困难

标签 c linux for-loop printf

这是我为此编写的代码 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/

相关文章:

javascript - 从字符串数组中删除相邻的双字母

C:指向任何类型的指针?

windows - 此时管道字符 "|"是意外的

c - 尝试将结构实例写入文件时出现段错误

c - 用于非内置命令的简单 shell 程序 unix 文件重定向

python - 运行AWS Deep Learning Base AMI(Amazon Linux 2)时如何在Elastic Beanstalk中设置WSGI?

c - 如何编写信号处理程序来捕获 SIGSEGV?

javascript - 数据角色中断 "for loop' 为什么

c - 如何正确释放SDL_ttf分配的资源?

C - fork 和 sleep 函数出现意外结果