50分 #6~10WA求助
查看原帖
50分 #6~10WA求助
1073879
Karl_Wan楼主2024/11/20 21:53

思路:因为DFS搜索转移的方向是有优先级的,因此把搜索转移的序列记录下来,就能够还原出方块,然后用set去重

评测记录:https://www.luogu.com.cn/record/190065627

#include <iostream>
#include <set>
#include <string>
using namespace std;
int a[505][505],n,m;
bool vis[505][505];
set<string> ans;
string temp;
int dir[4][2]={{0,-1},{-1,0},{0,1},{1,0}};
void dfs(int x,int y)
{
    vis[x][y]=1;
    for(int i=0;i<4;i++)//四向方向数组嘛 
    {
        int tx=dir[i][0]+x;
        int ty=dir[i][1]+y;
        if(a[tx][ty]==a[x][y]&&!vis[tx][ty]) {temp+=char(i+'0');dfs(tx,ty);}
    }
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(!vis[i][j]) {temp="";dfs(i,j);ans.insert(temp);}
        }
    }
    cout<<ans.size()<<'\n';
    
    return 0;
}
2024/11/20 21:53
加载中...