杭电1372 典型的广度优先算法
来源:互联网 发布:齐博cms整站系统v8 编辑:程序博客网 时间:2024/05/20 04:28
#include<iostream>
#include<string>
using namespace std;
#define M 200
#define N 10
using namespace std;
struct node
{
int col;//行
int row;//列
int pre;//上一个节点
}sq[M];
int map[N][N]={0};
string str1,str2;
int si,sj,ei,ej;
int dir[8][2]={{2,1},{2,-1},{-2,1},{-2,-1},{1,-2},{1,2},{-1,2},{-1,-2}}; //马每次可能跳的方向
//int map[10][10]
int count_step(node sq[],int rear)//输出路径
{
int i,count=0;
i=rear;
//do
while(i!=0)
{
i=sq[i].pre;
count++;
}
return count;
}
//int map[n2][m2]
void short_way()
{
int i,j,k,front=1,rear=1,x,y;
memset(map,0,sizeof(map)); //初始化
//初始化入口点
sq[front].col=si;//入口点横坐标
sq[front].row=sj;//纵坐标
sq[front].pre=0;//入口点在sq[]中前驱结点为sq[0]
map[si][sj]=-1;//标记入口点已经到达过
if(si==ei&&sj==ej)//起点==终点
{
cout<<"To get from "<<str1<<" to "<<str2<<" "<<"takes "<<0<<" knight moves."<<endl;
return;
}
while(front<=rear)
{
x=sq[front].col;
y=sq[front].row;
for(k=0;k<8;k++)
{
i=x+dir[k][0];
j=y+dir[k][1];
if(map[i][j]==0&&i>=0&&i<8&&j>=0&&j<8)//符合条件的点入队
{
rear++;
sq[rear].col=i;
sq[rear].row=j;
sq[rear].pre=front;
map[i][j]=-1;
}
if(i==ei&&j==ej)//找到了
{
// for(int m=0;m<rear;m++) cout<<sq[m].pre<<" ";cout<<endl;
int flag=count_step(sq,rear);
cout<<"To get from "<<str1<<" to "<<str2<<" "<<"takes "<<flag-1<<" knight moves."<<endl;
return;
}
}
front++;
}
//return 0;//没有路径
}
int main()
{
//freopen("1.txt","r",stdin);
while(cin>>str1>>str2)
{
si = str1[0]-97; //列从0开始,将字符转化为整数,a的ASCII码97
sj = str1[1]-'1';//行也从0开始,将字符整数转化为整数
ei = str2[0]-97;
ej = str2[1]-'1';
short_way();
}
return 0;
}
- 杭电1372 典型的广度优先算法
- 杭电1242--Rescue--BFS 广度优先算法详解
- 杭电1253HDU acm---胜利大逃亡----BFS广度优先算法实现
- 广度优先搜索算法的典型应用——消灭小星星游戏的核心代码实现与解析
- 【算法】图的广度优先算法
- 深度优先算法、广度优先算法 与 图的遍历
- 图的广度优先搜索算法实现
- 广度优先遍历BFS的图算法
- 基于邻接矩阵的广度优先算法
- 图的广度优先遍历算法
- 一个精炼的广度优先搜索算法
- 图的广度优先遍历算法
- 图的广度优先搜索----算法导论
- 基于广度优先搜索的拼图游戏算法
- 杭电ACM1180——诡异的楼梯~~广度优先搜索
- 广度优先搜索算法
- 广度优先算法
- 广度优先搜索算法
- 根据domain中固定值的value取得对应的text
- 【转+修改】Linux php 升级GD, 啃爹!
- 《Painting and Styling》学习笔记
- live555学习笔记5-RTSP服务运作
- DBMS_PIPE管道通信
- 杭电1372 典型的广度优先算法
- live555学习笔记6-建立RTP会话
- ON——NOTIFY的例子
- live555学习笔记7-RTP打包与发送
- 杭电1098 数学问题
- 【Android】状态栏通知Notification、NotificationManager详解
- apache 2.4 配置webdav的用户权限
- C++逗号表达式
- live555学习笔记8-RTSPClient分析