得了50分,后边全是运行异常,有无大佬帮看
查看原帖
得了50分,后边全是运行异常,有无大佬帮看
1234019
pyy1080楼主2024/12/19 00:18
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;


public class Main {
    static int n,m,cc,dd;
    static int[][] ans=new int[1003][1003],bns=new int[1003][1003];
    static int[] dx={1,1,1,0,0,-1,-1,-1},dy={-1,0,1,1,-1,-1,0,1};
    static Queue<int[]> q=new LinkedList<int[]>();
    /* static StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));*/
    static Scanner sc = new Scanner(System.in);
    public static void main(String[] args) {
        n = sc.nextInt();
        m = sc.nextInt();
        for (int i=1;i<=n;i++){
            for (int j=1;j<=m;j++){
                ans[i][j] = sc.nextInt();
            }
        }
        dfsa(1,1);
        dfsb(1,1);
        for (int i=1;i<=n;i++){
            for (int j=1;j<=m;j++){
                if(bns[i][j]==0){
                    dd++;
                    bns[i][j]=1;
                    q.add(new int[]{i,j});
                    bfs();
                }
            }
        }
        System.out.println(cc+dd);

    }
    static void bfs(){
        while (!q.isEmpty()){
            int[] a=q.poll();
            int xx,yy;
            for (int i=0;i<8;i++){
                xx=a[0]+dx[i];
                yy=a[1]+dy[i];
                if(xx>0&&yy>0&&xx<=n&&yy<=m&&bns[xx][yy]==0){
                    bns[xx][yy]=1;
                    q.add(new int[]{xx,yy});
                }
            }
        }
    }
    static void dfsb(int i,int j){
        if(j==m+1){
            dfsb(i+1,1);
            return;
        }
        if(i==n+1){
            return;
        }
        int xx,yy;
        boolean flag=false;
        if(bns[i][j]==2){
            for(int k=0;k<8;k++) {
                xx = i + dx[k];
                yy = j + dy[k];
                if(xx>0&&yy>0&&xx<=n&&yy<=m&&bns[xx][yy]==0){
                    flag=true;
                    break;
                }
            }
            if(!flag){
                cc++;
            }
            dfsb(i,j+1);
        }else{
            dfsb(i,j+1);
        }
    }
    static void dfsa(int i,int j){
        if(j==m+1){
            dfsa(i+1,1);
            return;
        }
        if(i==n+1){
            return;
        }
        int xx,yy;
        boolean flag=false;
        if(ans[i][j]==0){
            for(int k=0;k<8;k++) {
                xx = i + dx[k];
                yy = j + dy[k];
                if(xx>0&&yy>0&&xx<=n&&yy<=m&&ans[xx][yy]==1){
                    flag=true;
                    break;
                }
            }
            if(flag){
                bns[i][j]=2;
            }else {
                bns[i][j]=0;
            }
            dfsa(i,j+1);
        }else {
            bns[i][j]=1;
            dfsa(i,j+1);
        }

    }

}


2024/12/19 00:18
加载中...