当前位置: 代码迷 >> 综合 >> OpenJudge 1818:红与黑
  详细解决方案

OpenJudge 1818:红与黑

热度:46   发布时间:2023-11-21 18:30:11.0

在这里插入图片描述

思路:

1.首先我们先找到起点
2.以起点为初始结点开始搜索
3.以上下左右的顺序寻找未被访问过的黑色结点
3.移动到下一个结点并打上标记,代表这个结点已经被访问过了
4.如果这个当前结点周围都被访问过了,返回上一结点
5.重复直至栈空

代码

int m, n, counter = 1;
int mx[4] = {
     0,1,0,-1 };
int my[4] = {
     1,0,-1,0 };
bool nmap[30][30];
int a,b;
void dfs(int x, int y)
{
    for (int i = 0; i < 4; i++){
    if (nmap[x + mx[i]][y + my[i]] == true){
    x = x + mx[i]; y = y + my[i];nmap[x][y] = false;counter++;dfs(x, y);x = x - mx[i]; y = y - my[i];nmap[x][y]=true;}}
}