只有第二个点RE,求dalao看下,谢谢!

P1141 01迷宫

不好意思,格式不对,更正一下,尴尬 ``` #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int dx[4]={-1,0,1,0}; const int dy[4]={0,-1,0,1}; const int maxn=1010; int color[maxn][maxn]; int ans[maxn]; int a[maxn][maxn]; bool v[maxn][maxn];//标记数组(相当重要!!!) int cnt=0; int bfs(int x,int y) { v[x][y]=false; color[x][y]=cnt; int s=0; for(int i=0;i<4;i++) if(a[x+dx[i]][y+dy[i]]!=-1 && a[x+dx[i]][y+dy[i]]!=a[x][y] && v[x+dx[i]][y+dy[i]]==true) s=s+bfs(x+dx[i],y+dy[i])+1;//s=自己能到的+别人能到的 return s; } int main() { int n,m; scanf("%d%d",&n,&m); memset(a,-1,sizeof(a)); memset(v,true,sizeof(v)); for(int i=1;i<=n;i++) { string s; cin>>s; for(int j=0;j<n;j++) a[i][j+1]=s[j]-'0'; } for(int i=1;i<=m;i++) { int x,y; scanf("%d%d",&x,&y); if(color[x][y]) printf("%d\n",ans[color[x][y]]); else { cnt++; int answer=bfs(x,y)+1;//总数=自己能到的+别人能到的+1(自己也算) printf("%d\n",answer); ans[cnt]=answer; } } //system("pause"); return 0; } ```
by 我去好难啊 @ 2018-02-16 16:43:28


emmmm你确定这不是DFS?
by Loner_Knowledge @ 2018-02-16 17:03:30


|