1 条题解

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

    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

    信息

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