马踏棋盘(简单广搜)
来源:互联网 发布:战舰世界加贺数据 编辑:程序博客网 时间:2024/05/17 22:15
题目来源:http://vjudge.net/contest/toListContest.action
49557
反思:一开始想的太复杂了,就没有找到头绪,原因是没有理解广搜的特点,后来经过一夜的反思,明白了广搜找到的就是最短的路径,然后就直接写了代码,写代码是把判断条件写错了(数组下标写错了一位,写成了从1开始的下标),并且上述代码有点繁琐,可以用一个循环代替八个方向的判断。
[NWPU][2014][TRN][4]搜索C题
作者:npufz
题目:给定一个8*8的棋盘,然后给定棋子马的初始位置和目标位置,求算出从初始位置到目标位置,所需要的最短步数。
代码:
#include <iostream>#include <queue>using namespace std;int main(){ int h0,h1,a[8][8],i,j,h,w; char w0,w1; typedef pair <int ,char> wh; wh wh0; while(cin>>w0>>h0>>w1>>h1) { for(i=0;i<8;i++) for(j=0;j<8;j++) a[i][j]=0; h0--;h1--; queue<wh> que; while(que.size()) que.pop(); que.push(wh(h0,w0)); while(que.size()) { wh0=que.front();que.pop(); if(wh0.first==h1&&wh0.second==w1) {cout<<"To get from "<<w0<<h0+1<<" to "<<w1<<h1+1<<" takes "<<a[h1][w1-'a']<<" knight moves."<<endl; break;} h=wh0.first+2;w=wh0.second-'a'+1; if(h>=0&&h<8&&w<8&&w>=0&&a[h][w]==0&&(w!=w0-'a'||h!=h0)) { a[h][w]=a[wh0.first][wh0.second-'a']+1; que.push(wh(h,w+'a'));} h=wh0.first+1;w=wh0.second-'a'+2; if(h>=0&&h<8&&w<8&&w>=0&&a[h][w]==0&&(w!=w0-'a'||h!=h0)) { a[h][w]=a[wh0.first][wh0.second-'a']+1; que.push(wh(h,w+'a'));} h=wh0.first-2;w=wh0.second-'a'-1; if(h>=0&&h<8&&w<8&&w>=0&&a[h][w]==0&&(w!=w0-'a'||h!=h0)) { a[h][w]=a[wh0.first][wh0.second-'a']+1; que.push(wh(h,w+'a'));} h=wh0.first-1;w=wh0.second-'a'-2; if(h>=0&&h<8&&w<8&&w>=0&&a[h][w]==0&&(w!=w0-'a'||h!=h0)) { a[h][w]=a[wh0.first][wh0.second-'a']+1; que.push(wh(h,w+'a'));} h=wh0.first+2;w=wh0.second-'a'-1; if(h>=0&&h<8&&w<8&&w>=0&&a[h][w]==0&&(w!=w0-'a'||h!=h0)) { a[h][w]=a[wh0.first][wh0.second-'a']+1; que.push(wh(h,w+'a'));} h=wh0.first-2;w=wh0.second-'a'+1; if(h>=0&&h<8&&w<8&&w>=0&&a[h][w]==0&&(w!=w0-'a'||h!=h0)) { a[h][w]=a[wh0.first][wh0.second-'a']+1; que.push(wh(h,w+'a'));} h=wh0.first-1;w=wh0.second-'a'+2; if(h>=0&&h<8&&w<8&&w>=0&&a[h][w]==0&&(w!=w0-'a'||h!=h0)) { a[h][w]=a[wh0.first][wh0.second-'a']+1; que.push(wh(h,w+'a'));} h=wh0.first+1;w=wh0.second-'a'-2; if(h>=0&&h<8&&w<8&&w>=0&&a[h][w]==0&&(w!=w0-'a'||h!=h0)) { a[h][w]=a[wh0.first][wh0.second-'a']+1; que.push(wh(h,w+'a'));}}} return 0;}
反思:一开始想的太复杂了,就没有找到头绪,原因是没有理解广搜的特点,后来经过一夜的反思,明白了广搜找到的就是最短的路径,然后就直接写了代码,写代码是把判断条件写错了(数组下标写错了一位,写成了从1开始的下标),并且上述代码有点繁琐,可以用一个循环代替八个方向的判断。
0 0
- 马踏棋盘(简单广搜)
- HDU 1372 棋盘广搜
- 马踏棋盘之字典序遍历棋盘(简单深搜)
- POJ1426(简单广搜)
- Dice (简单广搜)
- 马踏棋盘+贪心启发搜索;第一次接触这么高级的搜索-,-;下一步准备学习双向广搜了;
- 最少步数(简单广搜)
- 简单广搜:Rescue (优先队列)
- hdu2717 简单广搜
- POJ1376简单广搜
- 广搜简单题
- 简单广搜:Nightmare
- 棋盘问题(简单深搜)
- 【百度之星初赛2】棋盘占领(深搜|广搜)
- hdu2612 简单两次广搜
- POJ 3278 简单广搜
- POJ 3278(简单广搜)
- 简单广搜:Knight Moves
- 题目1388:跳台阶
- UVa12541 - Birthdates(排序)
- Android Layout布局文件里的android:layout_height等属性为什么会不起作用?
- A - Red and Black(3.2.1)(搜索)
- [LeetCode] Implement strStr()
- 马踏棋盘(简单广搜)
- Android NDK-STACK Tool
- 遍历出基础教程视频文件夹里所有视频名称
- 黑马程序员——异常处理
- RabbitMq的配置
- Linux下的目录创建命令使用实践
- 题目1389:变态跳台阶
- 20140714 「初等数论 - 中国剩余定理」 POJ 1006 Biorhythms
- Sublime Text 2搭建Go开发环境,代码提示+补全+调试