【P1141 01迷宫】dfsTLE三个点,求助
  • 板块学术版
  • 楼主__Cow__
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/8/18 22:23
  • 上次更新2023/10/27 14:41:42
查看原帖
【P1141 01迷宫】dfsTLE三个点,求助
589272
__Cow__楼主2022/8/18 22:23

所以真的不能用DFS吗?

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <string>
#include <string.h>
using namespace std;
char A[1000+10][1000+10];
int a[1000+10][1000+10],s[1000+10][1000+10],n,m,b[100000+10][3],sum,ans[100000+10];
int k[5][3] = {{0,0},{-1,0},{0,1},{1,0},{0,-1}};
void zero()
{
    for (int i=1;i<=n;i++)
    {
        for (int j=1;j<=n;j++)
        {
            s[i][j] = 0;
        }
    }
}
void dfs(int x,int y)
{
    s[x][y] = 1;
    for (int i=1;i<=4;i++)
    {
        int x1 = x+k[i][0];
        int y1 = y+k[i][1];
        if (s[x1][y1]==0&&x1>0&&x1<=n&&y1>0&&y1<=n&&a[x1][y1]!=a[x][y]&&i!=0)
        {
            if (x1==0) cout <<x1<<endl<<y1<<endl;
            sum+=1;
            s[x1][y1] = 1;
            dfs(x1,y1);
        }
    }
}
int main()
{
    scanf ("%d %d", &n, &m);
    for (int i=1;i<=n;i++)
    {
        cin>>A[i];
    }
    for (int i=1;i<=m;i++)
    {
        scanf ("%d %d", &b[i][1], &b[i][2]);
    }
    for (int i=1;i<=n;i++)
    {
        for (int j=0;j<n;j++)
        {
            a[i][j+1] = A[i][j]-'0';
        }
    }
    for (int i=1;i<=m;i++)
    {
        sum = 1;
        dfs(b[i][1],b[i][2]);
        ans[i] = sum;
        zero();
    }
    for (int i=1;i<=m;i++)
    {
        printf ("%d\n", ans[i]);
    }
    return 0;
}

没学过BFS欸...太弱了

2022/8/18 22:23
加载中...