1 条题解
-
0
C :
#include<stdio.h> #include<stdlib.h> #include<string.h> char a[810][810]; int q[500000][2],f,r; int dx[8]={-1,-1,0,1,1,1,0,-1},dy[8]={0,1,1,1,0,-1,-1,-1}; int n,m,t; void bfs(int i,int j){ int x,y,k; a[i][j]='0'; f=0;r=1;q[r][0]=i;q[r][1]=j; while (f!=r){ f++; x=q[f][0];y=q[f][1]; for (k=0;k<8;k++) if ((x+dx[k]>=0)&&(x+dx[k]<n)&&(y+dy[k]>=0)&&(y+dy[k]<n)&&(a[x+dx[k]][y+dy[k]]=='1')) { a[x+dx[k]][y+dy[k]]='0'; r++; q[r][0]=x+dx[k];q[r][1]=y+dy[k]; } } } void dfs(int x,int y) { int k; for (k=0;k<8;k++) if (x+dx[k]>=0&&x+dx[k]<n&&y+dy[k]>=0&&y+dy[k]<n&&a[x+dx[k]][y+dy[k]]=='1') { a[x+dx[k]][y+dy[k]]='0'; dfs(x+dx[k],y+dy[k]); } } int main(){ int i,j; scanf("%d",&n); for (i=1;i<=n;i++) scanf("%s",a[i]); for (i=0;i<n;i++) for (j=0;j<n;j++) if (a[i][j]=='1') { t++; dfs(i,j); } printf("%d\n",t); return 0; }C++ :
#include<stdio.h> #include<string.h> char a[810][810]; int q[500000][2],f,r; int dx[8]={-1,-1,0,1,1,1,0,-1},dy[8]={0,1,1,1,0,-1,-1,-1}; int n,m,t; void bfs(int i,int j){ int x,y,k; a[i][j]='0'; f=0;r=1; q[r][0]=i;q[r][1]=j; while (f!=r){ f++; x=q[f][0];y=q[f][1]; for (k=0;k<8;k++) if ((x+dx[k]>=0)&&(x+dx[k]<n)&&(y+dy[k]>=0)&&(y+dy[k]<n)&&(a[x+dx[k]][y+dy[k]]=='1')){ a[x+dx[k]][y+dy[k]]='0'; q[++r][0]=x+dx[k];q[r][1]=y+dy[k]; } } } int main(){ int i,j; scanf("%d",&n); for (i=1;i<=n;i++) scanf("%s",a[i]); for (i=0;i<n;i++) for (j=0;j<n;j++) if (a[i][j]=='1') { t++;bfs(i,j); } printf("%d\n",t); return 0; }Pascal :
const dx:array[1..8]of longint=(-1,-1,0,1,1,1,0,-1); dy:array[1..8]of longint=(0,1,1,1,0,-1,-1,-1); var i,j,n,h,r,ans:longint; a:array[0..810,0..810]of char; q:array[0..500000,0..2]of longint; procedure bfs(i,j:longint); var x,y,k:longint; begin a[i,j]:='0'; h:=0;r:=1; q[r,0]:=i;q[r,1]:=j; while h<>r do begin inc(h); x:=q[h,0]; y:=q[h,1]; for k:=1 to 8 do if (x+dx[k]>=0)and(x+dx[k]<n)and(y+dy[k]>=0)and(y+dy[k]<n)and(a[x+dx[k],y+dy[k]]='1') then begin a[x+dx[k],y+dy[k]]:='0'; inc(r); q[r,0]:=x+dx[k];q[r,1]:=y+dy[k]; end; end; end; begin readln(n); for i:=1 to n do readln(a[i]); ans:=0; for i:=0 to n-1 do for j:=0 to n-1 do if a[i,j]='1' then begin inc(ans);bfs(i,j); end; writeln(ans); end.
- 1
信息
- ID
- 3533
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者