c - name.exe 已停止回溯工作

标签 c backtracking

对于 n=2k(n 偶数),显示所有正确闭合的括号。

in:4

out: (()), ()()

为什么我的程序在运行时显示“exe已停止工作”?我是否在循环中做错了什么,或者我解决这个问题的方法是否错误?

 #include<stdio.h>


    int v[10],n;

    void readfile()
    {
        FILE*fin;

        fin=fopen("in.txt", "rt");

        if(fin==NULL)
            printf("Error");
        else{
            fscanf(fin, "%d", n);
        }
        fclose(fin);
    }

    void writefile()
    {

        int j;
        FILE*fout;


        fout=fopen("out.txt", "wt");

        if(fout==NULL)
            printf("Error");
        else{
            readfile();
            for(j=1; j<=n; j++)
                if(v[j]==1)
                    fprintf(fout, "%c", 41);
                else
                    fprintf(fout, "%c", 40);
        }
        fclose(fout);
    }

    int condition(int k)
    {
        int close=0, open=0, i;
        readfile();

        for(i=1; i<=k; i++)
            if(v[i]==0)
                open++;
            else
                close++;

        return open<=n/2 && close <= open;

    }

    void backtracking(int k)
    {
        int i;
        readfile();
        for(i=0; i<=1; i++)
        {
            v[k]=i;

            if(condition(k))

                if(k==n)
                    writefile();
                else
                    backtracking(k+1);
        }
    }

    void main()
    {
        backtracking(1);
    }

最佳答案

我已经尝试过你的代码,这是这一行中的一个问题:

fscanf(fin, "%d", n);

你应该使用这个:

fscanf(fin, "%d", &n);

因为使用fscanf()函数时,需要传递指针而不是变量。

关于c - name.exe 已停止回溯工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29748102/

相关文章:

c - 从函数获取字符指针

java - 为最大硬币收集添加回溯算法?

java - 数独生成器算法优化 欢迎

python - 如何在回溯中撤消?我在使用递归回溯方法时遇到问题

algorithm - 是否存在 K 个整数的组合,使得它们的和等于给定的数?

linux - 如何在ubuntu上使用伯克利数据包过滤器(BPF)

c - C 中 for 循环的基本问题

c - 为什么说 "expression is not assignable"?

使用回溯的随机遍历 N * M 网格的复杂性

c - 源文件找不到头文件