2016蓝桥杯C/C++省赛 卡片换位(深搜DFS)
2017-03-25 17:18
232 查看
题目:
思路:
这题麻烦的一点在于处理输入和标记状态,以空格为点走,如果下一步是A点那么就让A走一格和空格换位,对于B点同理。注意在搜索的时候注意返回条件和判断是否越界
代码:
PS:惭愧啊。。这题找了3个小时Bug结果是一个判断越界的条件没加导致程序一直崩找不到原因,以后要注意心细一点。。
思路:
这题麻烦的一点在于处理输入和标记状态,以空格为点走,如果下一步是A点那么就让A走一格和空格换位,对于B点同理。注意在搜索的时候注意返回条件和判断是否越界
代码:
#include <cstdio> #include <cstring> #include <string> #include <iostream> #include <stack> #include <queue> #include <vector> #include <algorithm> #define mem(a,b) memset(a,b,sizeof(a)) #define inf 0x3f3f3f3f #define M 1000000+10 #define ll long long using namespace std; int go[4][2]= {0,1,0,-1,1,0,-1,0};//方向向量 int minn=inf; int vis[3][3][3][3][3][3];//标记数组 struct node { int x; int y; } a,b,k;//分别记录a,b和空格的坐标 void input()//处理输入 { char s; for(int i=0; i<2; i++) { for(int j=0; j<3; j++) { s=getchar(); if(s==' ') { k.x=i; k.y=j; } if(s=='A') { a.x=i; a.y=j; } if(s=='B') { b.x=i; b.y=j; } } getchar(); } } void dfs(int x1,int y1,int x2,int y2,int x,int y,int step) { if(step>minn) return; if(x1==b.x&&y1==b.y&&x2==a.x&&y2==a.y) { minn=min(minn,step); return; } //判断越界 if(x<0||x>1||y<0||y>2) return; if(x1<0||x1>1||y1<0||y1>2) return; if(x2<0||x2>1||y2<0||y2>2) return; if(vis[x1][y1][x2][y2][x][y]==1) return; vis[x1][y1][x2][y2][x][y]=1;//标记 for(int i=0; i<4; i++) { int xx=x+go[i][0]; int yy=y+go[i][1]; if(xx==x1&&yy==y1) dfs(x,y,x2,y2,x1,y1,step+1); else if(xx==x2&&yy==y2) dfs(x1,y1,x,y,x2,y2,step+1); else dfs(x1,y1,x2,y2,xx,yy,step+1); } vis[x1][y1][x2][y2][x][y]=0; } int main() { mem(vis,0); input(); dfs(a.x,a.y,b.x,b.y,k.x,k.y,0); printf("%d\n",minn); return 0; }
PS:惭愧啊。。这题找了3个小时Bug结果是一个判断越界的条件没加导致程序一直崩找不到原因,以后要注意心细一点。。
相关文章推荐
- 2016蓝桥杯C/C++省赛B组第6题 方格填数 DFS
- 2016蓝桥杯C/C++省赛 寒假作业(深搜DFS)
- 2016蓝桥杯C/C++省赛 方格填数(深搜DFS)
- 2016蓝桥杯C/C++省赛 剪邮票(深搜DFS+暴力)
- 2017第八届蓝桥杯C/C++ B组省赛第四题 dfs
- 2016蓝桥杯省赛B组C/C++
- 2016蓝桥杯C/C++省赛 四平方和(暴力,水题)
- 蓝桥杯省赛——卡片换位
- 2016年蓝桥杯省赛A组C/C++ 第二题 跳蚱蜢(dfs搜索+状态压缩)
- 2016蓝桥杯C/C++省赛 凑算式+搭积木(暴力,水题)
- 2016蓝桥杯c/c++ B组 省赛 方格填数
- 蓝桥杯2015年省赛B组C/C++题解
- 数据结构之——用C++实现邻接表的DFS与BFS
- 图的遍历之-DFS深度优先遍历C++实现
- 2015年蓝桥杯省赛B组C/C++(试题+答案)前几题
- 蓝桥杯 2014本科C++ B组 地宫取宝 DFS+记忆化搜索
- 图的dfs与bfs(深搜广搜)c++实现
- programming review (c++): (2)binary tree, BFS, DFS, recursive, non-recursive
- 2015年蓝桥杯省赛B组C/C++(试题+答案)
- 2012年第三届蓝桥杯C/C++省赛 微生物增殖