这道题是一道搜索题

但是 如果没有读懂或者 或者拐过弯 就很麻烦

最多26个火车 那么每一个周期 (人走一次 车走一次) 就要更改地图 的状态 而且操作复杂 容易超时 出错

利用相对运动

计周期为 人向上或向下或不动一步 + 向右三步

这样就变为走迷宫问题了

同样要注意

1、去重数组 或者 将以前访问过的点置为其他符号 避免重复访问

2、还有 因为 每次是三步三步的往右走 所以最后的边界可能不够 可以再扩充三列

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue> using namespace std; typedef pair<int, int> P; int T,t;
//bool vis[3][104];
char maze[][];
P start; bool check(int x ,int y)
{
if (x > || x < ) return false;
if (maze[x][y] != '.') return false;
return true;
}
bool bfs()
{
queue<P> que;
P crt = start;
crt.second++;
if (crt.second >= t) return true;
if (maze[crt.first][crt.second] == '.') que.push(crt);
while (!que.empty())
{
P crt = que.front();
que.pop();
for (int i = -; i < ; i++)
{
int tx = crt.first + i, ty = crt.second;
if ( !check(tx, ty) ) continue;
bool isSafe = true;
for (int j = ; j <= ; j++)
{
if (!check(tx, ty+j))
{
isSafe = false;
break;
}
}
if (isSafe)
{
if (ty+ >= t) return true;
else
que.push(P(tx, ty+));
}
}
maze[crt.first][crt.second] = 'A';//使用去重数组的话 内存超了 当访问完这个点以后 做标记 以后不再访问
}
return false;
}
int main()
{
freopen("in.txt", "r", stdin);
scanf("%d", &T);
int k;
while (T--)
{
scanf("%d%d", &t, &k);
//memset(vis, false, sizeof(vis));
for (int i = ; i < ; i++)
{
getchar();
for (int j = ; j < t; j++)
{
scanf("%c", &maze[i][j]);
if (maze[i][j] == 's')
{
start.first = i;
start.second = j;
}
}
for (int j = t; j < t+; j++)
{
maze[i][j] = '.';
}
}
if(bfs()) printf("YES\n");
else printf("NO\n");
}
return ;
}

最新文章

  1. 判断安卓和IOS
  2. zend studio常用快捷键
  3. C# Albert工程阅读关键字解析
  4. Jersey Rest服务类型
  5. Android监听WIFI网络的变化并且获得当前信号强度
  6. jfinal不能正确加载html网页,总是报错的解决方法
  7. Knockout绑定audio的pause事件导致音频无法停止
  8. Unity判断网络连接类型
  9. Model绑定
  10. mysql链接表,connection string, federated engine
  11. SQL语句 (一)
  12. Click One客户端安装后将安装目录删除,再从服务器下载安装无法安装解决办法
  13. java开发JDBC连接数据库代码
  14. instruments symbol name 不显示函数名!
  15. Unity中的粒子特效的 RendererQ 排序
  16. 虚拟主机ip配置,nginx.conf文件配置及日志文件切割
  17. Android性能优化系列之apk瘦身
  18. MongoDB(课时4 数据增加)
  19. [转]链接中 href=&#39;#&#39; 和 href=&#39;###&#39; 的区别以及优缺点
  20. 20155239 2016-2017-2 《Java程序设计》第7周学习总结

热门文章

  1. gulp插件之gulp-mock-server
  2. 序列化shelve模块
  3. SQLServer &#183; 最佳实践 &#183; SQL Server 2012 使用OFFSET分页遇到的问题
  4. Node.js Addons翻译(C/C++扩展)
  5. 解决Homestead yarn , npm run dev, 命令报错问题!
  6. Python3简明教程(二)—— 变量和数据类型
  7. example - 在这里插入一句话的简介
  8. 总结vue2.0 配置的实例方法
  9. Zend Studio 修改“代码字体和大小”
  10. Eclipse Code Recommenders 自动补全(联想)神器