#include <iostream>
#include <string>
#define MAXN 78
#define min _min
#define inf 123456789
using namespace std; char _m[MAXN][MAXN];
bool mark[MAXN][MAXN];
int dp[MAXN][MAXN];
int dis[][] = {,,,-,,,-,};
int dis_mark[] = {,,,};
int min;
int x_2;
int y_2;
int real_w;
int real_h;
void dfs(int x,int y,int dir,int step);
int main()
{
//freopen("acm.acm","r",stdin);
// freopen("out.txt","w",stdout);
int w;
int h;
int i;
int j;
int x_1;
int y_1;
int temp_x;
int temp_y;
string s;
int time = ;
while(cin>>w>>h,w||h)
{
cout<<"Board #"<<++ time<<":"<<endl;
getchar();
int time_in = ;
real_w = w+;
real_h = h+;
memset(_m,' ',sizeof(_m));
for(i = ; i <= h; ++ i)
{
getline(cin,s);
for(j = ; j <= w; ++ j)
{
_m[i][j] = s[j-];
}
} while(cin>>y_1>>x_1>>y_2>>x_2,x_1||y_1||x_2||y_2)
{ cout<<"Pair "<<++ time_in<<": ";
memset(mark,false,sizeof(mark));
for(i = ; i < MAXN; ++ i)
{
for(j = ; j < MAXN; ++ j)
{
dp[i][j] = inf;
}
}
min = inf;
for(i = ; i < ; ++ i)
{
temp_x = x_1 + dis[i][];
temp_y = y_1 + dis[i][];
if((_m[temp_x][temp_y] != 'X' ||_m[temp_x][temp_y] == 'X' && temp_x == x_2 && temp_y == y_2) && !mark[temp_x][temp_y])
{
mark[temp_x][temp_y] = true;
dfs(temp_x,temp_y,dis_mark[i],); mark[temp_x][temp_y] = false;
}
}
if(min == inf)
{
cout<<"impossible."<<endl;
}
else
{
cout<<min;
cout<<" segments."<<endl;
}
}
cout<<endl;
}
}
//上 1
//下 2
//左 3
//右 4
void dfs(int x,int y,int dir,int step)
{
if(x == x_2 && y == y_2)
{
if(step < min)
{
min = step;
}
return;
} if(step < dp[x][y])
{
dp[x][y] = step;
}
else
{
return;
} int i;
int j;
int temp_x;
int temp_y;// 右
for(i = ; i < ; ++ i)
{
temp_x = dis[i][] + x;
temp_y = dis[i][] + y;
if(temp_x >= && temp_x < real_h && temp_y >= && temp_y <= real_w &&( _m[temp_x][temp_y] != 'X' || _m[temp_x][temp_y] == 'X' && temp_x == x_2 && temp_y == y_2)&& !mark[temp_x][temp_y])
{
mark[temp_x][temp_y] = true;
if(dis_mark[i] != dir)
{
dfs(temp_x,temp_y,dis_mark[i],step+);
if(step+ < dp[temp_x][temp_y])
dp[temp_x][temp_y] = step+;
}
else
{
dfs(temp_x,temp_y,dis_mark[i],step);
if(step < dp[temp_x][temp_y])
dp[temp_x][temp_y] = step;
}
mark[temp_x][temp_y] = false;
}
} }

关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。

技术网站地址: vmfor.com

最新文章

  1. 机器学习实战knn
  2. jQuery Validate input是动态变化的
  3. Install and configure Intel NIC teaming on R420
  4. CentOS6.3系统安装SCP命令
  5. YQL
  6. DX笔记之一---Direct3D基础
  7. Java高精度学习第三弹——ACM中使用JAVA的详细介绍
  8. 用R画有图例的中国地图
  9. Divisibility by 25 CodeForces - 988E (技巧的暴力)
  10. Souvenir Shop 解题报告
  11. 常用js方法整理(个人)
  12. 将springboot打包成的jar文件做成windows服务,解决java程序自启动问题
  13. 艾奇学院:66个信息流广告和SEM学习网址资源大放送!
  14. 临时处理小记:把Numpy的narray二进制文件转换成json文件
  15. java乱码解决方法
  16. day053 url反向解析图解 模板渲染
  17. c# winform as3相互调用
  18. php 保存文件
  19. LeetCode--111--最长公共前缀
  20. Openwrt 3g模块

热门文章

  1. 2018.09.26洛谷P3957 跳房子(二分+单调队列优化dp)
  2. 记录一次shell里局部变量的问题
  3. python 编码方式大全 fr = open(filename_r,encoding=&#39;cp852&#39;)
  4. Vivado 常见报错
  5. ansible-playbook api 2.0 直接运行
  6. 12) maven-compiler-plugin
  7. android java层实现hook替换method
  8. Oracle Client 连接 Server 并通过代码测试连接
  9. ASP.NET MVC 中单独的JS文件中获取Controller中设定的值
  10. [javascript]IIFE立即执行的函数表达式