1 条题解

  • 0
    @ 2024-12-24 9:59:30

    C :

    #include<stdio.h>
    
    int W, H;
    int count;
    int vis[30][30];
    char str[30][30];
    
    struct Point{
        int x, y;
    }Start;
    
    int dx[]={-1,0,1,0}, dy[]={0,1,0,-1};
    
    void Scan_Point();//输入函数
    void DFS(struct Point p);//执行函数
    
    int main()
    {
        while(scanf("%d%d",&H,&W)){
            if(W==0 && H==0) break;
            count=1;
            Scan_Point();
            DFS(Start);
            printf("%d\n",count);
        }
        return 0;
    }
    
    void Scan_Point(){
        int i, j;
        getchar();
        for(i=0; i<W; i++){
            for(j=0; j<H; j++){
                scanf("%c",&str[i][j]);
                vis[i][j]=1;
                if(str[i][j]=='@'){
                    Start.x=i;
                    Start.y=j;
                }
            }
            getchar();
        }
    }
    
    void DFS(struct Point p){
        int a, b;
        int i, j;
        struct Point temp;
        for(i=0; i<4; i++){
            a=p.x+dx[i]; b=p.y+dy[i];
            temp.x=a; temp.y=b;
            if(a>=0 && a<W && b>=0 && b<H && str[a][b]=='.' && vis[a][b]){
                count++;
                vis[a][b]=0;
                DFS(temp);
            }
        }
        return ;
    }
    

    C++ :

    #include<iostream>
    #include<cstring>
    #include<queue>
    using namespace std;
    
    struct N
    {
    	int x,y;
    }start,head,tail;
    
    char g[20][20];
    int w,h,sum,v[20][20],f[][2]={{-1,0},{0,-1},{1,0},{0,1}};
    
    int bfs()
    {
    	sum=0;
    	memset(v,0,sizeof(v));
    	v[start.x][start.y]=1;
    	queue<struct N> q;
    	q.push(start);
    	while(!q.empty())
    	{
    		sum++;
    		head=q.front();
    		q.pop();
    		for(int i=0;i<4;i++)
    		{
    			tail.x=head.x+f[i][0];
    			tail.y=head.y+f[i][1];
    			if(!v[tail.x][tail.y]&&tail.x>=0&&tail.x<h&&tail.y>=0&&tail.y<w&&g[tail.x][tail.y]=='.')
    			{
    				q.push(tail);
    				v[tail.x][tail.y]=1;
    			}
    		}
    	}
    	return sum;
    }
    
    int main()
    {
    	int i,j;
    	while(cin>>w>>h,w||h)
    	{
    		for(i=0;i<h;i++)
    			for(j=0;j<w;j++)
    			{
    				cin>>g[i][j];
    				if(g[i][j]=='@')
    				{
    					start.x=i;
    					start.y=j;
    				}
    			}
    		cout<<bfs()<<endl;
    	}
    	return 0;
    }
    

    Java :

    import java.util.Scanner;
    
    
    public class Main {
    	static int m,n;
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		while(in.hasNextInt()){
    			n = in.nextInt();
    			m = in.nextInt();
    			if(n==0&&m==0)
    				break;
    			String[] s = new String[m];
    			char[][] maze = new char[m][n];
    			int[][] idx = new int[m][n];
    			for(int i=0;i<m;i++){
    				s[i] = in.next();
    				maze[i] = s[i].toCharArray();
    			}
    			for(int i=0;i<m;i++){
    				for(int j=0;j<n;j++){
    					if(idx[i][j]==0&&maze[i][j]=='@')
    						dfs(i,j,idx,maze,1);
    				}
    			}
    			int cnt=0;
    			for(int i=0;i<m;i++)
    				for(int j=0;j<n;j++){
    					if(idx[i][j]>0)
    						cnt++;
    				}
    			System.out.println(cnt);
    		}
    	}
    	public static void dfs(int r,int c,int[][]idx,char[][] maze,int id){
    		if(r<0||r>=m||c<0||c>=n)
    			return;
    		if(idx[r][c]>0||maze[r][c]=='#')
    			return;
    		idx[r][c] = id;
    		
    		dfs(r+1,c,idx,maze,id);
    		dfs(r-1,c,idx,maze,id);
    		dfs(r,c+1,idx,maze,id);
    		dfs(r,c-1,idx,maze,id);
    	}
    }
    
    
    • 1

    信息

    ID
    1659
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者