求救DFS
  • 板块灌水区
  • 楼主xiaoqi0
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/2/22 16:22
  • 上次更新2023/11/5 02:53:07
查看原帖
求救DFS
359598
xiaoqi0楼主2021/2/22 16:22

https://www.luogu.com.cn/problem/CF6B

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

const int N=110;
int n,m;
char c;
char str[N][N];
int ans;
bool st[N][N];
int num;
bool vis[26];

void  dfs(int x,int y)
{
    st[x][y]=1;
    int dx[]={0,0,1,-1,},dy[]={1,-1,0,0};
    
    for(int i=0;i<4;i++)
    {
        int a=x+dx[i],b=y+dy[i];
        if(a<0||b>n||b<0||b>m||str[a][b]=='.'||st[a][b]==1)  continue;
        
        if(vis[str[a][b]-'A']!=1&&str[a][b]!=c)//真正的桌子
        {
            vis[str[a][b]-'A']=1;
            st[a][b]=1;
        }
    }
}

int main()
{
    cin>>n>>m>>c;
    for(int i=1;i<=n;i++)
      for(int j=1;j<=m;j++)  
      cin>>str[i][j];
      
      memset(vis,0,sizeof vis);
      memset(st,0,sizeof st);
    for(int i=1;i<=n;i++)
      for(int j=1;j<=m;j++)
      if(c==str[i][j])
      dfs(i,j);
      
      for(int i=0;i<26;i++)
      if(vis[i])  ans++;
    cout<<ans<<endl;
    return 0;
}
2021/2/22 16:22
加载中...