name.exe已停止工作回溯

时间:2015-04-20 12:37:07

标签: c backtracking

对于n = 2k(n even),显示核心关闭的所有括号。

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);
    }

3 个答案:

答案 0 :(得分:1)

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

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

你应该改用:

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

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

答案 1 :(得分:0)

尝试调试您的程序。

中加一个断点
fin=fopen("in.txt", "rt");

并检查文件是否正确打开。

如果fin为NULL,则程序将崩溃,因为fclose将无法使用null fin。

(您发布的代码未编译,因为未定义deschise

答案 2 :(得分:0)

fout=fopen("out.txt", "wt");每次都会删除内容 所以应该是fout=fopen("out.txt", "at");

并删除main中的文件。

int main(void)
{
    remove("out.txt");
    backtracking(1);
    return 0;
}