dfs/poj 2488 A Knight's Journey

本文介绍了一种基于深度优先搜索的迷宫求解算法,通过递归方式探索迷宫路径,实现从起点到终点的路径查找。算法利用二维数组记录路径状态,使用辅助结构体保存每一步的状态,并通过回溯确保不重复探索已访问区域。
 1 #include<cstdio>
 2 using namespace std;
 3 const int b[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};
 4 int a[30][30],p,q;
 5 struct
 6 {
 7     int x,y;
 8 }step[910];
 9 
10 bool dfs(int x,int y,int now)
11 {
12     if (now==p*q) return true;
13     for (int m=0;m<8;m++)
14         {
15             int dx=x+b[m][0];
16             int dy=y+b[m][1];
17             if (dx>=1 && dy>=1 && dx<=q && dy<=p && a[dx][dy]==0)
18             {
19                 a[dx][dy]=1;
20                 step[now].x=dx;
21                 step[now].y=dy;
22                 if (dfs(dx,dy,now+1)) return true;
23                 a[dx][dy]=0;
24             }
25         }
26     return false;
27 }
28 
29 int main()
30 {
31     int n;
32     scanf("%d",&n);
33     for (int t=1;t<=n;t++)
34     {
35         printf("Scenario #%d:\n",t);
36         scanf("%d%d",&p,&q);
37         for (int i=0;i<=26;i++)
38             for(int j=0;j<=26;j++) a[i][j]=0;
39         a[1][1]=1;
40         step[0].x=1;
41         step[0].y=1;
42         if (!dfs(1,1,1)) printf("impossible\n\n");
43         else
44         {
45             for (int i=0;i<p*q;i++) printf("%c%d",(char)step[i].x+'A'-1,step[i].y);
46             printf("\n");
47             printf("\n");
48         }
49     }
50     return 0;
51 }

 

转载于:https://www.cnblogs.com/NicoleLam/p/4138822.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值