[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 ...
随机推荐
- ORACLE INSERT ALL 用法
1INSERT ALL 1.1句法 multi_table_insert :: = conditional_insert_clause :: = 1.2multi_table_insert 在多表插入 ...
- DataAdapter对象
DataAdapter对象在物理数据库表和内存数据表(结果集)之间起着桥梁的作用.它通常与DataTable对象或DataSet对象配合来实现对数据库的操作. DataAdapter对象是一个双向通道 ...
- MySQL子查询subquery
子查询(Subquery)是指出现在其他SQL语句内的SELECT子句. 例如: select * from t1 where col1=(select col2 from t2); 其中select ...
- 2019第九届MathorCup数学建模
题目下载:https://www.lanzous.com/i3taz2j 总共四个问题 问题1 首先附件一中的数据,拿到后肯定感觉棘手.我们的处理方法: 在下面缺失数据的地方我们都认为是问题3中的预测 ...
- 参数化登录QQ空间实例
通过参数化的方式,登录QQ空间 实例源码: # coding:utf-8 from selenium import webdriver import unittest import time clas ...
- TortoiseGit学习系列之TortoiseGit是什么?
写该文章目的 肯定有人会遇到这样的问题: 最近换了一份新工作,新公司的源码管理都是使用GIT,习惯了之前的TFS和SVN进行项目源码管理和团队开发,第一次使用GIT进行团队开发和源码管理,颇有一些不习 ...
- 使用BeanUtils封装数据时数据类型的转换
//获得表单数据 Map<String, String[]> properties = request.getParameterMap(); User user = new User(); ...
- 关于window.console&&console.log(123)的思考
一.JS的且运算记得最开始看到window.console&&console.log(123),当时知道能起什么作用但是没有深入研究,最近在研究后总算弄明白了.要理解这个,首先得明白三 ...
- PHP正则表达式(转载)
这个星期要攻破PHP正则表达式 正则表达式定义 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取 ...
- 用.net 2.0(或.net 3.5)开发的程序在.net 4.0的环境中运行的解决方案
引用:.NET2.0程序集无法在.net 4.0 中运行的解决方案 1. 原来是在.net 2.0 (VS2008)的环境下的程序,通过升级到.net 4.0 (VS2013)导致程序运行不了 提示需 ...