思路还是比较清晰,自己写的dfs最后一个超时,还得跑到nocow看题解,大牛门不愧是大牛,我用几十行判断能否placequeue,大牛们一句话就完了...看来还是多看看别人的思路,
不想改了,感觉该就得重写,贴个自己的代码在贴个大牛的,用大牛的过了先...
/*ID: hubiao cavePROG: checkerLANG: C++*/#include#include #include #include #include using namespace std;struct broad{ int column[15];};list
li;int count;int*xie;int cb[15][15];int threetimez=0;int temp[15];void proc(int row,int column);bool Canplace(int ,int);int main(){ ifstream fin("checker.in"); ofstream fout("checker.out"); fin>>count; xie=new int[(count-2)*4+2+2]; memset(xie,0,(count-2)*4+2+2); proc(1,0); list ::iterator it=li.begin(); int m=3; while (m>0) { int flag=0; for(int i=1;i<=count;i++) { if(!flag) { fout< column[i]; flag=1; } else { fout<<" "< column[i]; } } fout< 1&&i 1&&i 1) { if(xie[count-1+column-1]==1||xie[2*count-3+column-1]==1) return false; return true; } } return true;*/}
大牛的
#include#include #include using namespace std;ifstream fin("checker.in");ofstream fout("checker.out");int N;int tot=0;int C[255];int vis[3][255];//这个如果是用[3][14]的话,可能会产生缓冲区溢出。。我懒得试了 就开个大的。。最后还只是用了3K多Kbvoid search(int cur){ int i,j; if(cur==N) { tot++; if(tot<4) { for(int n=0;n >N; memset(C,0,14); search(0); fout< <