USACO 2.4 The Tamworth Two<简单图问题>
来源:互联网 发布:照片电子书制作软件 编辑:程序博客网 时间:2024/04/28 03:41
meaning:题意是给一张图,图中有牛的位置,农场主的位子和障碍物。牛和农场主只能沿着一个方向走直到要出界或者走到障碍物就转弯!!(注意是走到障碍物才转弯,而不是碰到之前转弯),转弯的方向为顺时针,问农场主是否可以和牛相遇。
the reason of failure:1、需要注意是走到障碍物才转弯。
2、给的图有C和F,如果只遇到'.'才走下去显然是错的,遇到C||F都可以接着走下去。
3、判定不能走的条件不仅是他们在之前走过的位子,还要在这个位子面对的方向与之前相同。
thinking:直接按着题意模拟走就行,认真看题再码,别着急
代码:
/*ID: mePROG: ttwoLANG: C++*/#include <iostream>#include <stdio.h>#include <string.h>#include <queue>using namespace std;struct ttt{int r[2];int c[2];int d[2];int step;int l[2];};char map1[12][12];int walked[11][11][11][11][11][11];int dd(ttt a,int b){ if(a.r[b]>=1&&a.r[b]<=10&&a.c[b]>=1&&a.c[b]<=10)return 1; else return 0;}int dd2(char c){ if(c=='.'||c=='F'||c=='C')return 1; else return 0;}int main(){ freopen("ttwo.in","r",stdin); freopen("ttwo.out","w",stdout); int i,j,k,l,f1,f2,f3,t71,t2,t3; ttt s1,s2; memset(map1,0,sizeof(map1)); memset(walked,0,sizeof(walked)); for(i=1;i<=10;i++) for(j=1;j<=10;j++){ cin >> map1[i][j]; if(map1[i][j]=='F'){ s1.r[0]=i; s1.c[0]=j; }else if(map1[i][j]=='C'){ s1.r[1]=i; s1.c[1]=j; } } s1.step=0; s1.d[0]=0; s1.d[1]=0; queue<ttt>qq; qq.push(s1); while(!qq.empty()){ s1=qq.front();qq.pop(); //cout << s1.r[0] << "," << s1.c[0] << "-" <<s1.d[0] << " " //<<s1.r[1] << "," << s1.c[1] << "-" << s1.d[1]; if(s1.r[0]==s1.r[1]&&s1.c[0]==s1.c[1]){ break; } //cout << " 没出去 "; //if(s1.l[0]==0){ if(s1.d[0]==0){ if(dd2(map1[s1.r[0]][s1.c[0]])&&dd2(map1[s1.r[0]-1][s1.c[0]])){ s1.r[0]--; }else{ s1.d[0]=(s1.d[0]+1)%4; } }else if(s1.d[0]==3){ if(dd2(map1[s1.r[0]][s1.c[0]])&&dd2(map1[s1.r[0]][s1.c[0]-1])){ s1.c[0]--; }else{ s1.d[0]=(s1.d[0]+1)%4; } }else if(s1.d[0]==2){ if(dd2(map1[s1.r[0]][s1.c[0]])&&dd2(map1[s1.r[0]+1][s1.c[0]])){ s1.r[0]++; }else{ s1.d[0]=(s1.d[0]+1)%4; } }else if(s1.d[0]==1){ if(dd2(map1[s1.r[0]][s1.c[0]])&&dd2(map1[s1.r[0]][s1.c[0]+1])){ s1.c[0]++; }else{ s1.d[0]=(s1.d[0]+1)%4; } } //if(s1.l[1]==0){ if(s1.d[1]==0){ if(dd2(map1[s1.r[1]][s1.c[1]])&&dd2(map1[s1.r[1]-1][s1.c[1]])){ s1.r[1]--; }else{ s1.d[1]=(s1.d[1]+1)%4; } }else if(s1.d[1]==3){ if(dd2(map1[s1.r[1]][s1.c[1]])&&dd2(map1[s1.r[1]][s1.c[1]-1])){ s1.c[1]--; }else{ s1.d[1]=(s1.d[1]+1)%4; } }else if(s1.d[1]==2){ if(dd2(map1[s1.r[1]][s1.c[1]])&&dd2(map1[s1.r[1]+1][s1.c[1]])){ s1.r[1]++; }else{ s1.d[1]=(s1.d[1]+1)%4; } }else if(s1.d[1]==1){ if(dd2(map1[s1.r[1]][s1.c[1]])&&dd2(map1[s1.r[1]][s1.c[1]+1])){ s1.c[1]++; }else{ s1.d[1]=(s1.d[1]+1)%4; } } // cout << s1.r[0] << "," << s1.c[0] << "-" <<s1.d[0] << " " // <<s1.r[1] << "," << s1.c[1] << "-" << s1.d[1] << " " ; // cout << walked[s1.r[0]][s1.c[0]][s1.d[0]][s1.r[1]][s1.c[1]][s1.d[1]] << endl; if(walked[s1.r[0]][s1.c[0]][s1.d[0]][s1.r[1]][s1.c[1]][s1.d[1]]==0){ walked[s1.r[0]][s1.c[0]][s1.d[0]][s1.r[1]][s1.c[1]][s1.d[1]]=s1.step; s1.step++; // cout << " 接着走" <<s1.step << endl; qq.push(s1); } } //cout << endl; if(s1.r[0]==s1.r[1]&&s1.c[0]==s1.c[1]){ cout << s1.step << endl; }else{ cout << 0 <<endl; } return 0;}
0 0
- USACO 2.4 The Tamworth Two<简单图问题>
- USACO--2.4The Tamworth Two
- USACO 2.4 The Tamworth Two
- usaco-The Tamworth Two
- USACO The Tamworth Two
- usaco The Tamworth Two
- usaco:The Tamworth Two
- USACO-The Tamworth Two
- USACO The Tamworth Two
- USACO-The Tamworth Two
- USACO 2.4.1 The Tamworth Two
- USACO 2.4 The Tamworth Two (ttwo)
- USACO 2.4.1 The Tamworth Two
- 【其他】【USACO】The Tamworth Two
- usaco The Tamworth Two 两只塔姆沃斯牛
- USACO Section 2.4 The Tamworth Two - 又犯2了..又把一个简单的问题整复杂了..
- USACO section 2.4 The Tamworth Two(算模拟吧)
- USACO Section 2.4 The Tamworth Two (BFS模拟)
- time 命令
- python机器学习库scikit-learn:SVR的基本应用
- string库其实没什么用
- Spring(二、实际操作)
- 8个hybrid app开发工具
- USACO 2.4 The Tamworth Two<简单图问题>
- oracle数据库的配置
- 关于使用javamail pop接收邮件
- html 获取黏贴的网页内容
- iOS学习笔记-045.UIWindow
- 上架AppleStore被拒绝的部分因素
- 2017-03-04 dotnet core网站发布到Linux系统中
- ETL介绍与ETL工具比较
- Python yield 使用浅析