求问什么情况?似乎BFS函数出问题了

P1451 求细胞数量

改过的程序,但是只有30??而且本地测试和测试数据上面答案一样??? ```cpp #include <stdio.h> #include <string.h> int que[100001][2],a[101][101],b[101][101],n,m; int qw[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; void bfs(int x,int y) { //printf("^^%d %d^^\n",x,y); int tail=1,head=0; b[x][y]=0; que[1][0]=x; que[1][1]=y; do { head++; for (int i=0;i<4;i++) { int x1=que[head][0]+qw[i][0]; int y1=que[head][1]+qw[i][1]; //printf("%d %d %d %d %d %d %d %d %d %d\n",x1,y1,b[x1][y1],a[x1][y1],x1>=1,x1<=n,y1>=1,y1<=m,a[x1][y1]>=1,n); if (b[x1][y1]==1 && x1>=1 && x1<=n && y1>=1 && y1<=m && a[x1][y1]>=1) { tail++; // printf("##%d %d###\n",x1,y1); que[tail][0]=x1; que[tail][1]=y1; b[x1][y1]=0; } // head++; } }while (head<tail); } int main() { int ans=0; char ch,ch1; scanf("%d%d",&n,&m); scanf("%c",&ch); for (int i=0;i<=n+1;i++) { for (int j=0;j<=m+1;j++) { b[i][j]=1; } } for (int i=1;i<=n;i++) { for (int j=1;j<=m+1;j++) { scanf("%c",&ch); a[i][j]=ch-'0'; } } for (int i=1;i<=n;i++) { for (int j=1;j<=m;j++) { if (a[i][j]>=1 && a[i][j]<=9 && b[i][j]==1) { //printf("%d %d\n",i,j) ; bfs(i,j); ans++; } } } printf("%d\n",ans); return 0; } ```
by Sakura_Peng @ 2017-10-10 23:38:02


其实这道题是可以用灌水法做的
by origin_star @ 2018-04-08 21:02:24


```pascal var a:array[1..1000,1..1000]of shortint; vis:array[1..1000,1..1000]of boolean; n,m,i,j,ans:longint; dx:array[1..4]of longint=(1,0,-1,0); dy:array[1..4]of longint=(0,1,0,-1); ch:char; procedure dfs(x,y:longint); var i:longint; begin if (x<1)or(x>n)or(y<1)or(y>m) then exit; if (vis[x,y])or(a[x,y]=0) then exit; vis[x,y]:=true; for i:=1 to 4 do dfs(x+dx[i],y+dy[i]); end; begin fillchar(vis,sizeof(vis),false); readln(n,m); for i:=1 to n do begin for j:=1 to m do begin read(ch); a[i,j]:=ord(ch)-48; end; readln; end; for i:=1 to n do for j:=1 to m do if (a[i,j]<>0)and(not vis[i,j]) then begin dfs(i,j); inc(ans); end; writeln(ans); end. ``` 贴上代码
by origin_star @ 2018-04-08 21:08:02


看不懂的话,可以让人翻译一下
by origin_star @ 2018-04-08 21:08:34


|