vijosP1879 小岛的贪吃蛇 BFS
来源:互联网 发布:茶之为饮 发乎神农氏 编辑:程序博客网 时间:2024/04/29 18:33
BFS 队列要手动开到1e6 (巨坑)。
#include <iostream>#include <algorithm>#include <cstring>#include <cmath>#include <map>#include <cstdio>#include <queue>using namespace std;int n,m,l,T;int vis[30][30][18000];int tab[30][30];int dx[]={0,1,-1,0};int dy[]={1,0,0,-1};struct node{ int step; int x[15],y[15];}start,q[1010000];void init(){ for(int i=1;i<=l;i++) { scanf("%d%d",&start.x[i],&start.y[i]); } int x,y; scanf("%d",&T); for(int i=1;i<=T;i++) { scanf("%d%d",&x,&y); tab[x][y]=1; }}bool judge(int x,int y){ if(x>0&&x<=n&&y>0&&y<=m) { return true; } return false;}int get(node a){ int tmp=0; for(int i=1;i<l;i++) { for(int j=0;j<4;j++) { if((a.x[i]+dx[j]==a.x[i+1]) && (a.y[i]+dy[j]==a.y[i+1])) { tmp=tmp*4+j; break; } } } return tmp;}node change(node a,int x,int y){ node tmp; tmp.step=a.step+1; tmp.x[1]=x; tmp.y[1]=y; for(int i=2;i<=l;i++) { tmp.x[i]=a.x[i-1]; tmp.y[i]=a.y[i-1]; } return tmp;}int bfs(){ node now,next; int xx,yy,tot; start.step=0; int head=0,tail=1; if(tab[1][1]==1) { return -1; } q[++tail]=start; vis[start.x[1]][start.y[1]][get(start)]=1; while(head<tail) { head++; now=q[head]; if(now.x[1]==1&&now.y[1]==1) { return now.step; } for(int i=0;i<4;i++) { int flag=0; xx=now.x[1]+dx[i]; yy=now.y[1]+dy[i]; if(!judge(xx,yy)) continue; for(int j=1;j<=l;j++) { if(xx==now.x[j]&&yy==now.y[j]) { flag=1; break; } } if(tab[xx][yy]) continue; if(flag) continue; next=change(now,xx,yy); int sum=get(next); if(vis[next.x[1]][next.y[1]][sum]) continue; vis[next.x[1]][next.y[1]][sum]=1; tail++; q[tail]=next; } } return -1;}int main(){ int cas=0; while(scanf("%d%d%d",&n,&m,&l)) { if(m+n+l==0) { break; } memset(tab,0,sizeof(tab)); memset(vis,0,sizeof(vis)); init(); cas++; printf("Case %d: ",cas); printf("%d\n",bfs()); } return 0;}/*5 6 44 14 23 23 132 33 33 44 4 42 31 31 42 442 12 23 44 2*/
0 0
- vijosP1879 小岛的贪吃蛇 BFS
- Holedox Moving 贪吃蛇 BFS 状态压缩
- TOJ简单版贪吃蛇(bfs)
- POJ 1324 贪吃蛇状态压缩BFS
- 简单的贪吃蛇
- 我的贪吃蛇
- canvas的贪吃蛇
- 贪吃蛇的制作
- 简单的贪吃蛇
- 贪吃蛇的游戏
- 贪吃蛇的一生
- 贪吃蛇的学习
- “丑陋”的贪吃蛇
- 贪吃蛇的想法
- 小小的贪吃蛇
- 简单的贪吃蛇
- (BFS,状态空间优化)Holedox Moving,贪吃蛇
- POJ 1324 Holedox Moving 贪吃蛇 状态压缩 BFS
- sum problem
- 教你如何在只供试听的网站上下载音乐
- switch()case的用法
- 终端架构师要求
- HDU 3037 Saving Beans 大组合数 lucas定理
- vijosP1879 小岛的贪吃蛇 BFS
- 关键字驱动测试
- Xcode 宏定义
- QT网络编程----TCP客户端(2)
- weblogic 12c忘记密码
- 读书笔记之阅读
- 【九度OJ】1027【欧拉回路】【C实现】【浙大2008】
- java的多态语法初学
- 不积跬步无以至千里--9月英语总结