想请教一下各位大佬为什么我main函数里的for 的t循环中,即使在四个if正前方memset了一波bool p数组,判p[ i ] [ j ]等于零的时候他不给我过啊!!!本人拿cout亲测其他都没问题(以下是本人测试代码),求大佬指点指点该怎么用这个bool p数组??
emmm思路大概是这样的:
我去搜没放该棋子之前旁边可能与该棋子接轨的棋子有没有预先构成连通块,然后看构成连通块的个数……假如是上下左右四个都是独立的话就相当于是一个把四个合成一个·-·但现在就卡在这步search上!!!贼离谱。。。我的p数组失效了吗????
#include<bits/stdc++.h>
using namespace std;
int f[502][502];
bool p[502][502];
int n,m,x,y,z;
int cnt=0;
void search(int i,int j,int x){
p[i][j]=1;
if(f[i+1][j]==x&&p[i+1][j]==0&&i+1<=n) search(i+1,j,x);
if(f[i-1][j]==x&&p[i-1][j]==0&&i-1>=1) search(i-1,j,x);
if(f[i][j+1]==x&&p[i][j+1]==0&&j+1<=n) search(i,j+1,x);
if(f[i][j-1]==x&&p[i][j-1]==0&&j-1>=1) search(i,j-1,x);
}
int main(){
memset(f,0,sizeof(f));
cin>>n>>m;
for(int i=0;i<=n+1;i++){
f[0][i]=-1;
f[i][0]=-1;
f[i][n+1]=-1;
f[n+1][i]=-1;
}
for(int t=1;t<=m;t++){
cin>>x>>y>>z;
f[y][z]=x+1;
cnt++;
memset(p,0,sizeof(p));
cout<<"["<<y<<","<<z<<"]number is"<<x+1<<" up="<<f[y-1][z]<<"#pos="<<p[y-1][z]<<" down="<<f[y+1][z]<<"#pos="<<p[y+1][z]<<" left="<<f[y][z-1]<<"#pos="<<p[y][z-1]<<" right="<<f[y][z+1]<<"#pos="<<p[y][z-1]<<endl;
if(f[y+1][z]==x+1/*&&p[y+1][z]==0*/){
cout<<"operate1 completed"<<endl;
cnt--;
search(y+1,z,x+1);
}
if(f[y-1][z]==x+1/*&&p[y-1][z]==0*/){
cout<<"operate2 completed"<<endl;
cnt--;
search(y-1,z,x+1);
}
if(f[y][z+1]==x+1/*&&p[y][z+1]==0*/){
cout<<"operate3 completed"<<endl;
cnt--;
search(y,z+1,x+1);
}
if(f[y][z-1]==x+1/*&&p[y][z-1]==0*/){
cout<<"operate4 completed"<<endl;
cnt--;
search(y,z-1,x+1);
}
cout<<"###$### ans="<<cnt<<endl;
}
return 0;
}