Re: Two recursive calls inside of a recursive function
Jim Langston wrote:
// Now, we want to pass a copy to foo, not the original.
// So make a copy.
DataType OCCopy = oc;
DataType ACopy = a;
foo(1,OCCopy,ACopy,1,1,1);
// Reset our copies
OCCopy = oc;
ACopy = a;
foo(1,OCCopy,ACopy,1,1,1);
Seems some steps in your code are unnecessary. It's my code:
#include <cstdio>
#include <cstdlib>
#include <vector>
using namespace std;
typedef vector< vector<short> > grid;
int ans;
void foo(short sch, grid oc, grid a, short p, short q, short fl) {
if (sch==28) {ans++; return;}
if (fl==1) {
oc[a[p][q]][a[p][q+1]]=1;
oc[a[p][q+1]][a[p][q]]=1;
a[p][q]=7;
a[p][q+1]=7;
}
else {
oc[a[p][q]][a[p+1][q]]=1;
oc[a[p+1][q]][a[p][q]]=1;
a[p][q]=7;
a[p+1][q]=7;
}
for (int i=1; i<=7; i++)
for (int j=1; j<=8; j++)
if ((a[i][j]!=7)&&(a[i-1][j]==7)&&(a[i][j-1]==7)) {
if (oc[a[i][j]][a[i][j+1]]==0)
foo(sch+1,oc,a,i+0,j+0,1);
if (oc[a[i][j]][a[i+1][j]]==0)
foo(sch+1,oc,a,i+0,j+0,2);
return;
}
}
int main() {
grid oc(10,10),a(10,10);
for (int i=0; i<=9; i++)
for (int j=0; j<=9; j++)
a[i][j]=7;
for (int i=0; i<=7; i++) {
oc[i][7]=1; oc[7][i]=1;
}
FILE* fp=fopen("E:\\e.txt","r");
int tcs;
fscanf(fp,"%d",&tcs);
while (tcs--) {
for (int i=0; i<=6; i++)
for (int j=0; j<=6; j++)
oc[i][j]=0;
for (int i=1; i<=7; i++)
for (int j=1; j<=8; j++)
fscanf(fp,"%d",&a[i][j]);
ans=0;
foo(1,oc,a,1,1,1);
foo(1,oc,a,1,1,2);
printf("%d\n",ans);
}
fclose(fp);
system("pause");
return 0;
}