HDU - 5546 - Ancient Go (dfs)

题意: 

点代表空格,相同棋子上下左右相连为一个分量,当一个分量不与点相连的时候这个分量就是死的,题目先把o死的分量去除,再把x死的分量去除,这之后再下一个x问能不能使一个o分量dead,最后这个就是判断有没有o分量所连的点只有一个

思路:

搜索三次即可

#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;
const int maxn = 1e5 +10;
const int inf = 0x3f3f3f3f;
char ma[20][20];
char ma2[20][20];
int n,m;
int vis[20][20];
set >  se;
set >  se2;
set >  ::iterator it;
pair p;
int dirx[4] = {0,0,1,-1};
int diry[4] = {1,-1,0,0};
bool inside(int x,int y)
{
    return x >= 0 &&x <= 8 && y >= 0 &&y <= 8;
}
int f;
void dfs(int x,int y)
{
    vis[x][y] = 1;
    for(int i = 0 ;  i  < 4 ; i++)
    {
        int dx = x + dirx[i];
        int dy = y + diry[i];
        if(inside(dx,dy))
        {
            if( ma[dx][dy] =='.')
            {
                se.insert(make_pair(dx,dy));
            }
            else if(ma[dx][dy] == 'o' && vis[dx][dy] ==0)
            {
                dfs(dx,dy);
            }
        }
    }
}
void dfs1(int x,int y)
{
    vis[x][y] = 1;
    //if(x==8 &&y ==6) cout<<"********"<

 

你可能感兴趣的:(ACM解题记录,dfs)