50分!!!悬赏一关注

B3625 迷宫寻路

Blued @ 2022-10-10 16:38:18

(悲

#include<bits/stdc++.h>
#define int long long
using namespace std;

const int N = 150;

bool vis[N][N];

int n , m;

char a[N][N];

void dfs(int x , int y)
{
    if(x < 0 || x >= n || y < 0 || y >= n)
    return ;

    if(a[x][y] == '#')
    return ;

    if(vis[x][y])
    return ;

    vis[x][y] = true;

    dfs(x - 1 , y);
    dfs(x + 1 , y);
    dfs(x , y - 1);
    dfs(x , y + 1);
}

main()
{
    cin >> n >> m;

    for(int i = 0;i < n;i ++)
    cin >> a[i];

    dfs(0 , 0);

//  for(int i = 0;i < n;i ++)
//  for(int j = 0;j < n;j ++)
//  if(vis[i][j])
//  cout << i << ' ' << j << '\n';

    if(vis[n - 1][m - 1])
    puts("Yes");
    else
    puts("No");
    return false;
}

by Axxx @ 2022-10-10 16:40:54

    if(x < 0 || x >= n || y < 0 || y >= n)

应改成:

    if(x < 0 || x >= n || y < 0 || y >= m)

因为是 nm 列。


by ImposterAnYu @ 2022-10-10 16:46:40

if(x < 0 || x >= n || y < 0 || y >= n)

y >= n 要改成 y >= m,因为这个迷宫是 n \times m,不是 n \times n


by Zelensky @ 2022-10-10 17:14:10

@star_and_her

#include<bits/stdc++.h>
#define int long long
using namespace std;

const int N = 150;

bool vis[N][N];

int n , m;

char a[N][N];

void dfs(int x , int y)
{
    if(x < 0 || x >= n || y < 0 || y >= m)
    return ;

    if(a[x][y] == '#')
    return ;

    if(vis[x][y])
    return ;

    vis[x][y] = true;

    dfs(x - 1 , y);
    dfs(x + 1 , y);
    dfs(x , y - 1);
    dfs(x , y + 1);
}

main()
{
    cin >> n >> m;

    for(int i = 0;i < n;i ++)
    for(int j=0;j<m;j++) 
    cin >> a[i][j];
    dfs(0 , 0);
//  for(int i = 0;i < n;i ++)
//  for(int j = 0;j < n;j ++)
//  if(vis[i][j])
//  cout << i << ' ' << j << '\n';

    if(vis[n - 1][m - 1])
    puts("Yes");
    else
    puts("No");
    return false;
}

二十毫秒比我广搜都快


by Zelensky @ 2022-10-10 17:15:18

@Zelensky 口胡了,20ms


|