1 条题解

  • 0
    @ 2025-9-10 9:00:35

    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
    上传者