1 solutions

  • 0
    @ 2025-11-5 19:36:45

    C :

    #include<stdio.h>
    #include<string.h>
    int n,m;
    char s[104][104];
    int dir[8][2]={-1,-1,-1,0,-1,1,0,-1,0,1,1,-1,1,0,1,1};
    int vis[104][104];
    void dfs(int x,int y)
    {
        int i;
        if(x<0||x>=n||y<0||y>=m||vis[x][y]||s[x][y]=='*') return;
        vis[x][y]=1;
        for(i=0; i<8; i++)
            dfs(x+dir[i][0],y+dir[i][1]);
    }
    int main()
    {
        int i,j,ans,t;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&n,&m);
            memset(s,0,sizeof(s));
            memset(vis,0,sizeof(vis));
            ans=0;
            for(i=0;i<n;i++)
                scanf("%s",s[i]);
            for(i=0;i<n;i++)
                for(j=0;j<m;j++)
                    if(s[i][j]=='@'&&!vis[i][j])
                    {
                        ans++;
                        dfs(i,j);
                    }
            printf("%d\n",ans);
        }
        return 0;
    }
    
    

    C++ :

    #include <iostream>
    #include <cstring>
    #include <fstream>
    
    using namespace std;
    
    char mat[115][115];
    int visited[115][115];
    
    void dfs(int x,int y)
    {
        if((visited[x][y]==1 || mat[x][y]=='*' ))
            return;
        visited[x][y]=1;
        dfs(x-1,y-1);
        dfs(x-1,y);
        dfs(x-1,y+1);
    
        dfs(x,y-1);
        dfs(x,y+1);
    
        dfs(x+1,y-1);
        dfs(x+1,y);
        dfs(x+1,y+1);
    }
    
    int main()
    {
    	//ifstream cin;
    	//cin.open("5.in");
    	//ofstream cout;
    	//cout.open("5.out");
    	int length,height;
    	int testcase;
    	cin>>testcase;
    	while(testcase--)
        {
        	cin>>length>>height;
    
            memset(mat,'*',sizeof(mat));
            memset(visited,0,sizeof(visited));
            int count=0;
            for(int i=1;i<=length;i++)
            {
                for(int j=1;j<=height;j++)
                {
                    cin>>mat[i][j];
                }
            }
    
            for(int i=1;i<=length;i++)
            {
                for(int j=1;j<=height;j++)
                {
                    if(mat[i][j]=='@' && visited[i][j]==0)
                    {
                        dfs(i,j);
                        count++;
                    }
                }
            }
            cout<<count<<endl;
        }
        return 0;
    }
    
    
    • 1

    Information

    ID
    19453
    Time
    3000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By