[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 ...
随机推荐
- python 反射和内置方法
一.isinstance和issubclass class Foo: pass class Son(Foo): pass s = Son() #判断一个对象是不是这个类的对象,传两个参数(对象,类) ...
- 解决js array的key不为数字时获取长度的问题
最近写js时碰到了当数组key不为数字时,获取数组的长度为0 的情况. 1.问题场景 var arr = new Array(); arr[‘s1‘] = 1001; console.log(arr. ...
- 转 OGG 部署阶段常见问题
序号 问题 解决方案1 "2019-04-13 20:23:55 ERROR OGG-00868 Oracle GoldenGate Capture for Oracle, e_db1.pr ...
- 初学SSM遇到的BUG
一.SpringMVC部分 1.参数绑定 1.1简单类型绑定 参数类型推荐使用包装数据类型,因为基础数据类型不可以为null 整形:Integer.int 字符串:String 单精度:Float.f ...
- (转)正则表达式与Python(RE)模块
Python正则表达式指南 原文:http://blog.csdn.net/qdx411324962/article/details/46799831 Python3(2):正则表达式与Python ...
- selenium+Python(鼠标和键盘事件)
本篇总结了 web 页面常用的一些操作元素方法,可以统称为行为事件有些 web 界面的选项菜单需要鼠标悬停在某个元素上才能显示出来(如百度页面的设置按钮). 1 简单操作 1.点击(鼠标左键)页面按钮 ...
- Spark on YARN简介与运行wordcount(master、slave1和slave2)(博主推荐)
前期博客 Spark on YARN模式的安装(spark-1.6.1-bin-hadoop2.6.tgz +hadoop-2.6.0.tar.gz)(master.slave1和slave2)(博主 ...
- 常用linux网络工具
iftop netstat nethogs可以查看进程占用网络的情况 nc -u -z -w2 192.168.0.1 1-1000 //扫描192.168.0.3 的端口 范围是 1-1000
- 关于重绘and重排
在研究CSS3动画性能的时候,看到了重排两个字. 突然想到自己虽然听说过这么个东东,但一直也没深入研究之. 趁着当下正好有研究的劲头,所以一不做二不休,把这个point也给学习了. 同样是一番查找资料 ...
- Linux中让普通用户拥有超级用户的权限
问题 假设用户名为:ali 如果用户名没有超级用户权限,当输入 sudo + 命令 时, 系统提示: ali is not in the sudoers file. This incident wi ...