对于 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/