dfs0分求调
  • 板块P1141 01迷宫
  • 楼主what_is
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/24 20:49
  • 上次更新2025/1/25 08:53:09
查看原帖
dfs0分求调
1366469
what_is楼主2025/1/24 20:49
#include <bits/stdc++.h>
using namespace std;

bool f[2005][2005];//初始读入数组
long long cur = 0;//a数组光标
long long a[200005];//记录每种cnt的数值
long long cnt = 0;//记录走到格子数
long long z[2005][2005];//记录种类(后面方便与a数组输出)
long long n, m;//...
bool f3 = false;//记录上次格子01
bool f4 = false;//记录是否为第一次执行dfs

void dfs(long long x, long long y)//x行y列的参数
{
	if(z[x][y] != 0)
	{
		return;
	}
    if(x == 0 || y == 0)//判越界
    {
        return;
    }
    if(x > n || y > n)//判越界
    {
        return;
    }
    bool f2 = f[x][y];//记录当前格子01
    if(f2 == f3 && !f4)//若01相同
    {
    	return;//打回
    }
    //否则继续运行
    f3 = f2;//维护上次格子01
    z[x][y] = cur;//维护种类
    cnt++;//维护计数器
  /*000
    010
    000*/
    x--;
  /*010
    000
    000*/
    dfs(x, y);//下一步
    y--;
  /*100
    000
    000*/
    dfs(x, y);
    y++;
  /*010
    000
    000*/
    y++;
  /*001
    000
    000*/
    dfs(x, y);
    y--;
  /*010
    000
    000*/
    x++;
  /*000
    010
    000*/
    y--;
  /*000
    100
    000*/
    dfs(x, y);
    y++;
  /*000
    010
    000*/
    y++;
  /*000
    001
    000*/
    dfs(x, y);
    y--;
  /*000
    010
    000*/
    x++;
  /*000
    000
    010*/
    dfs(x, y);
    y--;
  /*000
    000
    100*/
    dfs(x, y);
    y++;
  /*000
    000
    010*/
    y++;
  /*000
    000
    001*/
    dfs(x, y);
}

int main()
{
    cin >> n >> m;
    for(long long i = 1; i <= n; i++)
    {
        string s;
        cin >> s;
        for(long long j = 0; j < s.size(); j++)
        {
            f[i][j + 1] = s[j] - '0';
        }
    }
    /*输入*/
    for(long long i = 1; i <= n; i++)
    {
        for(long long j = 1; j <= n; j++)
        {
            if(z[i][j] == 0)
            {
            	f4 = true;
                cur++;//维护种类
                cnt = 0;//计数器清零
                dfs(i, j);//开始
                a[cur] = cnt;//维护a数组
            }
        }
    }
    while(m--)
    {
    	long long x, y;
    	cin >> x >> y;
    	cout << a[z[x][y]] << endl;
    }
}

第2个大评测点过了,但第一个全wa

2025/1/24 20:49
加载中...