河南第五届ACM省赛(遥 控 器)(BFS+优先队列)
来源:互联网 发布:awesome mac 编辑:程序博客网 时间:2024/05/16 14:54
题目地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=543
思路:队友教的我,能想到广搜,队友用了优先队列并且用visit数组标记已经到达的频道号
AC代码:
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <cstring>#include <climits>#include <cmath>#include <cctype>const int inf = 0x7f7f7f7f;//2139062143typedef long long ll;using namespace std;int a[15];int visit[100];//标记已经走过的频道号int start,end1;struct node{ int loc; int step; friend bool operator < (node a,node b) { return a.step > b.step;//最小值优先 }};int bfs(){ priority_queue<node> pq; node now,next; now.loc = start; now.step = 0; visit[start] = 1; pq.push(now); while(!pq.empty()) { next = pq.top(); pq.pop(); if(next.loc == end1) { return next.step; } if(a[11])//频道号增加1 { now.loc = (next.loc + 1) % 100; now.step = next.step + 1; if(!visit[now.loc]) { visit[now.loc] = 1; pq.push(now); } } if(a[12])//频道号减少1 { now.loc = (next.loc - 1 + 100) % 100; now.step = next.step + 1; if(!visit[now.loc]) { visit[now.loc] = 1; pq.push(now); } } for(int i=0; i<10; i++)//到0-9的频道号 { if(a[i] && !visit[i]) { now.loc = i; now.step = next.step + 1; visit[now.loc] = 1; pq.push(now); } } for(int i=10; i<100; i++)//到10-99的频道号 { if(a[10] && a[i/10] && a[i%10] && !visit[i]) { now.loc = i; now.step = next.step + 3; visit[now.loc] = 1; pq.push(now); } } } return -1;}int main(){ int t; scanf("%d",&t); while(t--) { memset(visit,0,sizeof(visit)); scanf("%d%d%d%d",&a[1],&a[2],&a[3],&a[11]); scanf("%d%d%d%d",&a[4],&a[5],&a[6],&a[12]); scanf("%d%d%d",&a[7],&a[8],&a[9]); scanf("%d%d",&a[10],&a[0]); scanf("%d%d",&start,&end1); int sum = bfs(); printf("%d\n",sum); } return 0;}
标称:(模拟的太好了)
#include <stdio.h>#include <stdlib.h>int c[128];int id(int x){if(x < 0)return x+100;elsereturn x%100;}int to(int x){x = id(x);if(x/10==0)return c[x];int a = x/10,b = x%10;if(!c['-'] || !c[a] || !c[b])return 0;elsereturn 3;}int min(int a,int b){if(a==-1)return b;elsereturn a<b ? a : b;}int main(){int z,a,b,ans;scanf("%d",&z);while(z--){ans = -1;for(int i=1;i<=3;i++)scanf("%d",&c[i]);scanf("%d",&c['s']);for(int i=4;i<=6;i++)scanf("%d",&c[i]);scanf("%d",&c['x']);for(int i=7;i<=9;i++)scanf("%d",&c[i]);scanf("%d%d",&c['-'],&c[0]);scanf("%d%d",&a,&b);for(int i=1;i<100;i++){if(c['s']){if(id(b-i)==a)ans = min(ans,i);else if(to(b-i))ans = min(ans,to(b-i)+i);}if(c['x']){if(id(b+i)==a)ans = min(ans,i);else if(to(b+i))ans = min(ans,to(b+i)+i);}}printf("%d\n",ans);}//system("pause");return 0;}
0 0
- 河南第五届ACM省赛(遥 控 器)(BFS+优先队列)
- 河南第五届ACM省赛(Divideing Jewels)
- 河南第五届ACM省赛(奇怪的排序)
- 河南第五届ACM省赛(Metric Matrice)
- 挑战ACM迷宫(DFS,BFS,BFS+优先队列)
- 河南第五届ACM省赛(最强DE 战斗力)(找规律+大数)
- 河南第三届ACM省赛(素数)
- 河南第四届ACM省赛(BOBSLEDDING)
- hdu5040(bfs,优先队列)
- hdu1242(BFS+优先队列)
- hdu1242(bfs+优先队列)
- Rescue (BFS 优先队列)
- Rescue(优先队列+bfs)
- rescue(BFS+优先队列)
- 【 题集 】 第五届河南ACM省赛 更新ing......
- 四川省ACM省赛B题,优先队列+BFS Charitable Exchange
- 2014 ACM/ICPC Asia Regional Beijing Online(hdu5040)优先队列BFS
- [ACM] hdu 1242 Rescue (BFS+优先队列)
- Android LayoutInflater深度解析 给你带来全新的认识
- 在js里获取json格式的时间
- iOS 保持登陆状态
- 字符串匹配的KMP算法
- 心胸
- 河南第五届ACM省赛(遥 控 器)(BFS+优先队列)
- redis操作之String类型操作
- SVN合并时报错:Merge tracking not allowed with missing subtrees; try restoring these items
- 在Eclipse下远程调试Tomcat
- 深入理解 Context
- 客户端是手机访问还是PC访问
- poj 2288 哈密顿路 状压dp
- 傻瓜学算法系列之排序——2.插入排序
- toString() ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE)