[uva] 10067 - Playing with Wheels
10067 - Playing with Wheels
题目页:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1008
从一开始思路就不对,之后才焕然大悟……每次都是这样。
还有,感觉搜索和图遍历有点分不清呢。
在第63行加入
if (u == target)
return;
可以提速很多,可以从300ms左右降低到100ms以内。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
#include <iostream>#include <queue>#define Dec true#define Inc falseint start; // 开始数值int target; // 目标数值bool op[4]; // 4 个转盘的操作int ban_number; // 禁止数的个数int ban[10001]; // 记录禁止数的数组struct{ int parent; bool used;} buffer[10001]; // 顶点// 增大数值void decrease(int current[], int i){ current[i]--; if (current[i] == -1) current[i] = 9;}// 减小数值void increase(int current[], int i){ current[i]++; if (current[i] == 10) current[i] = 0;}// 广度优先搜索void bfs(){ std::queue<int> q; // 初始化顶点 for (int i = 0; i < 10000; i++) { buffer[i].parent = -1; buffer[i].used = false; } // 把禁止数标记为已发现 for (int i = 0; i < ban_number; i++) { buffer[ban[i]].used = true; } // 初始化开始节点 buffer[start].used = true; q.push(start); while(!q.empty()) { int u = q.front(); q.pop(); int depart[4]; int a = u / 1000; int b = (u - a*1000) / 100; int c = (u - a*1000 - b *100) / 10; int d = (u - a*1000 - b *100 - c *10); depart[0] = a; depart[1] = b; depart[2] = c; depart[3] = d; for (int i = 0; i < 4; i++) { decrease(depart, i); { int x = depart[0] * 1000 + depart[1] * 100 + depart[2] * 10 + depart[3]; if (buffer[x].used == false) { buffer[x].parent = u; buffer[x].used = true; q.push(x); } } increase(depart, i); increase(depart, i); { int x = depart[0] * 1000 + depart[1] * 100 + depart[2] * 10 + depart[3]; if (buffer[x].used == false) { buffer[x].parent = u; buffer[x].used = true; q.push(x); } } decrease(depart, i); } }}// 读取四个个位数组成一个四位数,并返回这个四位数int read4(){ int a, b, c, d; scanf("%d%d%d%d", &a, &b, &c, &d); return a * 1000 + b *100 + c * 10 + d;}// mainint main(){ int n; scanf("%d", &n); for (int i = 0; i < n; i++) { start = read4(); target = read4(); scanf("%d", &ban_number); for (int j = 0; j < ban_number; j++) { ban[j] = read4(); } bfs(); { int x = target; int steps = 0; while(x != -1 && x != start) { steps++; x = buffer[x].parent; } if (x == start) printf("%d\n", steps); else printf("-1\n"); } } return 0;} |
[uva] 10067 - Playing with Wheels的更多相关文章
- uva10067 Playing with Wheels 【建图+最短路】
题目:option=com_onlinejudge&Itemid=8&page=show_problem&problem=1008">uva10067 Play ...
- UVA 1482 - Playing With Stones(SG打表规律)
UVA 1482 - Playing With Stones 题目链接 题意:给定n堆石头,每次选一堆取至少一个.不超过一半的石子,最后不能取的输,问是否先手必胜 思路:数值非常大.无法直接递推sg函 ...
- UVa - 11283 - PLAYING BOGGLE
先上题目 Problem F PLAYING BOGGLE Boggle® is a classic word game played on a 4 by 4 grid of letters. The ...
- uva 1482 - Playing With Stones
对于组合游戏的题: 首先把问题建模成NIM等经典的组合游戏模型: 然后打表找出,或者推出SG函数值: 最后再利用SG定理判断是否必胜必败状态: #include<cstdio> #defi ...
- (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...
- ACM训练计划step 1 [非原创]
(Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成 ...
- 算法竞赛入门经典+挑战编程+USACO
下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...
- uva 6757 Cup of Cowards(中途相遇法,貌似)
uva 6757 Cup of CowardsCup of Cowards (CoC) is a role playing game that has 5 different characters (M ...
- (转) Deep Reinforcement Learning: Playing a Racing Game
Byte Tank Posts Archive Deep Reinforcement Learning: Playing a Racing Game OCT 6TH, 2016 Agent playi ...
随机推荐
- Hangfire项目
什么是Hangfire Hangfire 是一个开源的.NET任务调度框架,目前1.6+版本已支持.NET Core.个人认为它最大特点在于内置提供集成化的控制台,方便后台查看及监控: 另外,Hang ...
- jconsole 和jvisualVM 监控远程 spring boot程序
监控java 程序 增加启动参数 java \ -Djava.rmi.server.hostname=192.168.2.39 \ -Dcom.sun.management.jmxremote \- ...
- 3dsmax2012卸载/安装失败/如何彻底卸载清除干净3dsmax2012注册表和文件的方法
3dsmax2012提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dsmax2012失败提示3dsmax2012安装未完成,某些产品无法安装,也有时候想重新 ...
- Delphi对话框初始地址InitialDir
我的电脑:SaveDialog1.InitialDir := '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}';// My Computer {20D04FE0-3 ...
- unity接入安卓sdk (unity调用安卓工程)
1.安装jdk 并且配置环境,这个网上资料很多,这里不说了 2.安卓开发软件eclipse集成环境版 下载地址 http://tools.android-studio.org/index.php/ad ...
- 更好的理解MVC
mvc除了将数据层和逻辑层分离外,还有更好的优化了代码结构 m只和c交互,v也只和c交互,m与v的交互需要通过c,一共只用考虑4条路 如果不是这样的话,m v c需要考虑和每个人交互,那么就是要考虑 ...
- poj 3601 Tower of Hanoi
Tower of Hanoi Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 1853 Accepted: 635 De ...
- 本地IDC机房数据库容灾解决方案
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库 TencentDB 发表于云+社区专栏 作者介绍:李明,腾讯云数据库架构师华南区负责人,曾在某专业数据库服务商.51jo ...
- jmeter(5)——参数化
之前接触过QTP或者Loadrunner的小伙伴,应该对参数化不陌生,在<badboy详解篇>中也介绍了badboy的参数化,今天说一下jmeter的参数化,同样,我们举例说明,以msn. ...
- [转]Oracle 初始化参数之cursor_sharing
本文转自:http://www.cnblogs.com/Richardzhu/archive/2013/01/21/2869837.html 一.Cursor_sharing简介: 这个参数是用来告诉 ...