poj3984(经典dfs)

本文介绍了解决POJ 3984问题的方法,通过深度优先搜索(DFS)来寻找从起点到终点的最短路径。在5x5的网格中,遇到障碍物为0,可通过路径为1的情况下,优先向下或向右移动可确保找到最短路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

题目链接:http://poj.org/problem?id=3984

分析:直接深搜从起点到终点,如何取最短路线,其实只要优先向下或向右走即可。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 1000000007
#define inf 0x3f3f3f3f
#define N 100010
using namespace std;
int s[10][10];
stack<int>s1,s2;
int vis[10][10];
int judge(int a,int b)
{
    return a>=0&&a<5&&b>=0&&b<5&&s[a][b]==0&&!vis[a][b];
}
int dfs(int x,int y)
{
    if(x==4&&y==4)
    {
        s1.push(x);s2.push(y);return 1;
    }
    vis[x][y]=1;
    if(judge(x,y+1)&&dfs(x,y+1)||judge(x+1,y)&&dfs(x+1,y)||
       judge(x-1,y)&&dfs(x-1,y)||judge(x,y-1)&&dfs(x,y-1))
    {

        s1.push(x);s2.push(y);return 1;
    }
    else
    {
        return 0;
    }
    return 0;
}
void print()
{
    while(!s1.empty())
    {
        printf("(%d, %d)\n",s1.top(),s2.top());
        s1.pop();s2.pop();
    }
}
int main()
{
    memset(vis,0,sizeof(vis));
    for(int i=0;i<5;i++)
        for(int j=0;j<5;j++)scanf("%d",&s[i][j]);
    dfs(0,0);print();
}
View Code

 

转载于:https://www.cnblogs.com/lienus/p/4167691.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值