迷宫问题bfs, A Knight's Journey(dfs)
迷宫问题(bfs)
#include <iostream>
#include <queue>
#include <stack>
#include <cstring> using namespace std; /*广度优先搜索*/
/*将每个未访问过的邻接点进队列,然后出队列,知道到达终点*/ typedef class
{
public:
int x;
int y;
}coordinate; int maze[][]; //迷宫
int road[][] = { { , - }, { , }, { -, }, { , } };
coordinate pre[][]; //记录当前坐标的前一个坐标 int visited[][] = { }; /*利用一个栈,倒序输出pre中存入的坐标*/
void print()
{
stack<coordinate> S;
coordinate rhs = { , }; while ()
{
S.push(rhs);
if (rhs.x == && rhs.y == )
break;
rhs = pre[rhs.x][rhs.y];
} while (!S.empty())
{
rhs = S.top();
S.pop();
cout << "(" << rhs.x << ", " << rhs.y << ")" << endl;
}
} void bfs(int x, int y)
{
queue<coordinate> Q; //用来帮助广度优先搜索
coordinate position; position.x = x, position.y = y; Q.push(position); while (!Q.empty())
{
position = Q.front();
Q.pop(); visited[position.x][position.y] = ;
coordinate position2; if (position.x == && position.y == ) //如果找到终点,停止搜索
{
print();
return;
} for (int i = ; i < ; i++)
{ position2.x = position.x + road[i][];
position2.y = position.y + road[i][]; if (position2.x >= && position2.x <= && position2.y >= && position2.y <= && maze[position2.x][position2.y] == && !visited[position2.x][position2.y]) //如果这个邻接点不是墙且未访问过,则进队列
{
Q.push(position2);
pre[position2.x][position2.y] = position; //记录当前坐标的前一个坐标位置
visited[position2.x][position2.y] = ;
} }
}
} int main()
{
memset(maze, , sizeof(pre));
for (int i = ; i < ; i++)
for (int j = ; j < ; j++)
{
cin >> maze[i][j];
} //memset(pre, 0, sizeof(pre)); //现将pre初始化 bfs(, ); return ;
}
A Knight's Journey
#include <cstring>
#include<iostream>
using namespace std; char route[][]; //记录行驶的路线
int board[][]; //棋盘 int total = ;
int length;
/*dfs深度优先搜索*/ int go[][] = { { -, - }, { , - }, { -, - }, { , - }, { -, }, { , }, { -, }, { , } };//字典序方向 /*一次跳跃*/
void knight(int p, int q,int len ,int row, int col) //len为行走的距离,用来判断是否遍历整个棋盘, row和col为当前坐标
{
board[row][col] = ;
route[len][] = col + 'A' - , route[len][] = row + '';
length = len;
/*让马分别尝试8个方向的跳跃,知道跳不动为止*/ int x, y; for (int i = ; i < ; i++)
{ x = row + go[i][];
y = col + go[i][]; if (x > && x <= p && y > && y <= q && board[x][y] == )
knight(p, q, len + , x, y);
} /*if (row - 1 >= 1 && col - 2 > 0 && board[row - 1][col - 2] == 0)
knight(p, q, len + 1, row - 1, col - 2); if (row + 1 <= p && col - 2 > 0 && board[row + 1][col - 2] == 0)
knight(p, q, len + 1, row + 1, col - 2); if (row - 2 >= 1 && col - 1 > 0 && board[row - 2][col - 1] == 0)
knight(p, q, len + 1, row - 2, col - 1); if (row + 2 <= p && col - 1 > 0 && board[row + 2][col - 1] == 0)
knight(p, q, len + 1, row + 2, col - 1); if (row - 2 >= 1 && col + 1 <= q && board[row - 2][col + 1] == 0)
knight(p, q, len + 1, row - 2, col + 1); if (row + 2 <= p && col + 1 <= q && board[row + 2][col + 1] == 0)
knight(p, q, len + 1, row + 2, col + 1); if (row - 1 >= 1 && col + 2 <= q && board[row - 1][col + 2] == 0)
knight(p, q, len + 1, row - 1, col + 2); if (row + 1 <= p && col + 2 <= q && board[row + 1][col + 2] == 0)
knight(p, q, len + 1, row + 1, col + 2);*/ } int main()
{
int N, p, q; //行数, 每次的宽和高
cin >> N; while (N--)
{
cin >> p >> q;
knight(p, q, , , ); //以行走了0个单元
cout << "Scenario #" << ++total << ":" << endl;
if (length == p * q - )
{ for (int i = ; i <= length; i++)
cout << route[i][] << route[i][];
cout << endl << endl;
}
else
cout << "impossible" << endl << endl;
memset(board, , sizeof(board)); //清空棋盘的足迹
memset(route, , sizeof(route)); //清空路线
} return ;
}
迷宫问题bfs, A Knight's Journey(dfs)的更多相关文章
- POJ2488A Knight's Journey[DFS]
A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 41936 Accepted: 14 ...
- A Knight's Journey(dfs)
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 25950 Accepted: 8853 Description Back ...
- POJ2488:A Knight's Journey(dfs)
http://poj.org/problem?id=2488 Description Background The knight is getting bored of seeing the same ...
- [poj]2488 A Knight's Journey dfs+路径打印
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 45941 Accepted: 15637 Description Bac ...
- POJ2248 A Knight's Journey(DFS)
题目链接. 题目大意: 给定一个矩阵,马的初始位置在(0,0),要求给出一个方案,使马走遍所有的点. 列为数字,行为字母,搜索按字典序. 分析: 用 vis[x][y] 标记是否已经访问.因为要搜索所 ...
- POJ2488-A Knight's Journey(DFS+回溯)
题目链接:http://poj.org/problem?id=2488 A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Tot ...
- POJ 2488 A Knight's Journey(DFS)
A Knight's Journey Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 34633Accepted: 11815 De ...
- A Knight's Journey 分类: dfs 2015-05-03 14:51 23人阅读 评论(0) 收藏
A Knight’s Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 34085 Accepted: 11621 ...
- poj2488 A Knight's Journey裸dfs
A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 35868 Accepted: 12 ...
随机推荐
- 最经典25本Python编程开发电子书精粹
Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”.在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确的没有或者很少有歧义的语法,具备更 ...
- hdu-5009 Paint Pearls DP+双向链表 with Map实现去重优化
http://acm.hdu.edu.cn/showproblem.php?pid=5009 题目要求对空序列染成目标颜色序列,对一段序列染色的成本是不同颜色数的平方. 这题我们显然会首先想到用DP去 ...
- pymysql连接数据库,读取表内容
python中有MySQLdb.pymysql等数据库模块,本文用pymysql模块连接mysql数据库,并且读取数据库表 看过其他博文的介绍,把程序和数据库比作两个目的地,将游标比喻成运输货车 很是 ...
- Java JRT
解释器 运行步骤: 找到环境变量CLASSPATH,CLASSPATH包含一个或者多个目录,用作查找.class文件的根目录 从根目录开始,解释器获取包名并将每个.替换成\或/(取决于操作系统) 得到 ...
- SQL-47 如何获取emp_v和employees有相同的数据?
题目描述 存在如下的视图:create view emp_v as select * from employees where emp_no >10005;如何获取emp_v和employees ...
- 自动化测试badboy脚本开发(一)
badboy的检查点: 检查点设置例子:以上一节脚本录制方法简单录制搜索“badboy”脚本,在搜索框中选中搜索内容(注意录制脚本后要停止录制)→点击工具栏中的Tools→选择Add Assertio ...
- java中的线程问题(二)——线程的创建和用法。
在java中一个类要当作线程来使用有两种方法. 1.继承Thread类,并重写run函数 2.实现Runnable接口,并重写run函数 因为java是单继承的,在某些情况下一个类可能已经继承了某个父 ...
- Neo4j图数据库使用
最近在处理一些图的数据,主要是有向图,如果图的节点不是特别大可以直接加载到内存里来处理,但是当图的节点个数特别大时,内存就放不下了:我 们牵涉到的图的节点数最大可以达到数亿个节点,已经超出的机器内存的 ...
- [IntelliJ IDEA入门] 新建一个Java项目
新建一个Project 是否有JDK配置 选择JavaEE 点击Next 项目路径和文件 .idea (directory based) 创建项目的时候自动创建一个 .idea 的项目配置目录来保存项 ...
- ::WritePrivateProfileString()的用法,以及GetPrivateProfileString的用法注意事项
WritePrivateProfileString(_T("Section1"),_T("Field1"),Field,savePath); 函数说明,这是在写 ...