ZOJ-1008 Gnome Tetravex

26 篇文章 0 订阅
Gnome Tetravex

Time Limit: 10 Seconds      Memory Limit: 32768 KB

Hart is engaged in playing an interesting game, Gnome Tetravex, these days. In the game, at the beginning, the player is given n*n squares. Each square is divided into four triangles marked four numbers (range from 0 to 9). In a square, the triangles are the left triangle, the top triangle, the right triangle and the bottom triangle. For example, Fig. 1 shows the initial state of 2*2 squares.


Fig. 1 The initial state with 2*2 squares

The player is required to move the squares to the termination state. In the termination state, any two adjoining squares should make the adjacent triangle marked with the same number. Fig. 2 shows one of the termination states of the above example.


Fig. 2 One termination state of the above example

It seems the game is not so hard. But indeed, Hart is not accomplished in the game. He can finish the easiest game successfully. When facing with a more complex game, he can find no way out.

One day, when Hart was playing a very complex game, he cried out, "The computer is making a goose of me. It's impossible to solve it." To such a poor player, the best way to help him is to tell him whether the game could be solved. If he is told the game is unsolvable, he needn't waste so much time on it.


Input

The input file consists of several game cases. The first line of each game case contains one integer n, 0 <= n <= 5, indicating the size of the game.

The following n*n lines describe the marking number of these triangles. Each line consists of four integers, which in order represent the top triangle, the right triangle, the bottom triangle and the left triangle of one square.

After the last game case, the integer 0 indicates the termination of the input data set.


Output

You should make the decision whether the game case could be solved. For each game case, print the game number, a colon, and a white space, then display your judgment. If the game is solvable, print the string "Possible". Otherwise, please print "Impossible" to indicate that there's no way to solve the problem.

Print a blank line between each game case.

Note: Any unwanted blank lines or white spaces are unacceptable.


Sample Input

2
5 9 1 4
4 4 5 6
6 8 5 4
0 4 4 3
2
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
0

Output for the Sample Input

Game 1: Possible

Game 2: Impossible

————————————————————集训1.1的分割线————————————————————

思路:这是一道DFS题,如果思考方向不对会感到很困难。那是因为这个矩阵需要自己“安排”,要尝试所有的摆放可能(不可旋转)。但是这么想太复杂了。换个思路,一个n×n的空矩阵,我从左上角第一个开始摆放,依次进行,只要符合题意就继续,不然就尝试下一个方块。这样每次摆放只需要看两个方向,即上和左。所有的方块存储成一维,即用即取。其实这样就不像是dfs了,倒是像暴力枚举了。枚举的不应该是图,应该是方块。

但是会超时。解决超时的办法,是把完全一样的方块统计归纳在一处,这样就不必重复尝试。但还是会超时,还需要剪枝,一旦找到了一个解,就不要再找其他的方案了。

PS:下次再Debug,先看括号的位置有没有错吧!

代码如下:

/*
ID: j.sure.1
PROG: 
LANG: C++
*/
/****************************************/
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <string>
#include <iostream>
using namespace std;
/****************************************/
const int N = 25;
struct Node
{
	int dir[4];
	bool operator == (const Node &tmp)
	{
		if(memcmp(dir, tmp.dir, sizeof(dir)) == 0)
			return true;
		return false;
	}
}node[N];
int quan[N], mat[5][5], n;
bool ans;

void dfs(int cur)
{
	if(ans || cur == n*n) {//剪枝
		ans = true;
		return ;
	}
	int x = cur / n, y = cur % n;
	for(int i = 0; i < n*n; i++) {
		if(quan[i]) {
			if(x > 0) {
				if(node[i].dir[0] != node[mat[x-1][y]].dir[2])
					continue;
			}
			if(y > 0) {
				if(node[i].dir[3] != node[mat[x][y-1]].dir[1])
					continue;
			}
			mat[x][y] = i;
			--quan[i];
			dfs(cur+1);//如果此位置放置i
			++quan[i];//不放置i,尝试别的
		}
	}
}

int main()
{
	#ifndef ONLINE_JUDGE
	freopen("1008.in", "r", stdin);
	freopen("1008.out", "w", stdout);
	#endif
	int cas = 1;
	while(scanf("%d", &n), n) {
		if(cas > 1) puts("");
		memset(quan, 0, sizeof(quan));
		for(int i = 0; i < n*n; i++) {
			for(int d = 0; d < 4; d++) {
				scanf("%d", &node[i].dir[d]);
			}
			bool same = false;
			for(int j = 0; j < i; j++) {
				if(quan[j] && node[j] == node[i]) {
					quan[j]++;
					same = true;
					break;
				}
			}
			if(!same)
				quan[i]++;
		}
		ans = false;
		memset(mat, 0, sizeof(mat));
		printf("Game %d: ", cas++);
		dfs(0);
		if(ans)
			puts("Possible");
		else
			puts("Impossible");         
	}
	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ZJU 题型分类 ZJU_Main 主页 下一页 ZJU 题型分类 文演整理版 2008-3-23 数论: 1007 Numerical Summation of a Series 简单题,还是蛮有意思的 1045 HangOver 简单题 1049 I Think I Need a Houseboat 简单题 1028 Flip and Shift 简单题,可以DP/BFS/……,但是实际上有数学方法可直接判断出来 1026 Modular multiplication of polynomials 简单题,有比较简单的好算法 1307 Packets 简单题,不过也蛮经典的…… 1312 Prime Cuts 简单题 1334 Basically Speaking 简单题 1337 Pi 简单题 1342 Word Index 简单题 1349 Four Quarters 简单题 1350 The Drunk Jailer 简单题 1352 Number Base Conversion 简单题 1353 Unimodal Palindromic Decompositions 规模不大,所以是简单题…… 1354 Extended Lights Out 简单题 1362 Game Prediction 简单题 1365 Mileage Bank 简单题 1382 A Simple Task 简单题 1383 Binary Numbers 简单题 1403 Safecracker 简单题 1408 The Fun Number System 简单题 1486 Color the Tree 简单题 1487 Playing Cards 简单题 1489 2^x mod n = 1 简单题,应该有好算法,不过枚举就可以过…… 1503 One Person "The Price is Right" 简单题,POI Eggs的翻版 1512 Water Treatment Plants 简单题,组合计数 1526 Big Number 简单题,不过O(1)和O(n)还是有区别的:) 1529 Enigmatic Travel 简单题,不过个人感觉题目描述很令人费解 1530 Find The Multiple 简单题 1537 Playing with a Calculator 简单题 1577 GCD & LCM 简单题,分区联赛的题…… 1005 Jugs 简单题 1543 Stripies 简单题 1569 Partial Sums 简单题 1062 Trees Made to Order 简单题 1070 Bode Plot 简单题 1073 Round and Round We Go 简单题,142857,我喜欢^_^ 1078 Palindrom Numbers 简单题 1086 Octal Fractions 简单题 1199 Point of Intersection 简单题 1104 Leaps Tall Buildings 简单题 1110 Dick and Jane 简单题 1115 Digital Roots 简单题 1113 u Calculate e 简单题 1152 A Mathematical Curiosity 简单题 1154 Niven Numbers 简单题 1160 Biorhythms 简单题 1163 The Staircases 简单题 1177 K-Magic Number 简单题 1184 Counterfeit Dollar 简单题 1182 Keeps Going and Going and ... 简单题,我喜欢:) 1284 Perfection 简单题 1272 Numerically Speaking 简单题 1269 Coconuts, Revisited 简单题 1247 There s Treasure Everywhere! 简单题 1241 Geometry Made Simple 简单题 1202 Divide and Count 简单题 1216 Deck 简单题 1218 Ratio 简单题 1261 Prime Land 简单题 1212 Mountain Landscape 无聊题 1410 Number Sequence 无聊题 1401 Hilbert Curve Intersections 无聊题 1331 Perfect Cubes 无聊题 1322 Random Number 无聊题 1535 Lucky Ticket 无聊题 1539 Lot 无聊题 1363 Chocolate 经典题…… 1366 Cash Machine 经典题!强烈推荐! 1149 Dividing up 经典题,可以用1366的方法做,利用问题的特殊性用贪心做出来 1222 Just the Facts 经典题,据说可能有O(logn)的做法,但我没想到:( 1475 Ranklist 没有完美解决,不知道您有没有好方法…… 1572 Bracelet 题义不明,感觉可能是判定欧拉回路的存在性,但是过不去 1133 Smith Numbers 没有完美解决,数学 1080 Direct Subtraction 尚未解决,我过的程序是错的,想和您讨论~~~ 1229 Gift?! SRbGa的经典题…… 1238 Guess the Number SRbGa的经典题…… 1239 Hanoi Tower Troubles Again! SRbGa的经典题…… 字符串处理: 1050 Start Up the Startup 简单题 1315 Excuses, Excuses! 简单题 1151 Word Reversal 简单题,好像是什么Practice的…… 1170 String Matching 简单题 1174 Skip Letter Code 不错的简单题 1175 Word Process Machine 简单题 1181 Word Amalgamation 简单题 1038 T9 无聊题,单词树 1330 DNA Translation 无聊题 1335 Letter Sequence Analysis 无聊题 1099 HTML 无聊题 1243 URLs 无聊题 1540 Censored! 经典题!强烈推荐! 1511 Word Puzzles 没有完美解决的题, 动态规划: 1011 NTA 简单题 1013 Great Equipment 简单题 1024 Calendar Game 简单题 1027 Human Gene Functions 简单题 1037 Gridland 简单题 1052 Algernon s Noxious Emissions 简单题 1409 Communication System 简单题,但是很容易看错~~~ 1425 Crossed Matchings 简单题 1438 Asteroids! 简单题 1459 String Distance and Transform Process 简单题 1462 Team Them Up! 简单题 1556 Heroes Of Might And Magic 简单题,不过背景蛮有意思的…… 1520 Duty Free Shop 简单题 1524 Supermarket 简单题 1301 The New Villa 简单题 1303 Jury Compromise 其实不是很难,但是很容易错,555…… 1345 Best Deal 简单题,但是也很容易错……555…… 1360 Radar Installation 简单题 1396 The Umbrella Problem: 2054 简单题 1058 Currency Exchange 简单题 1076 Gene Assembly 简单题 1092 Arbitrage 简单题 1093 Monkey and Banana 简单题 1094 Matrix Chain Multiplication 简单题 1536 Labyrinth 简单题 1100 Mondriaan s Dream 简单题,DP可以过,不过据说有复杂的组合公式 1103 Hike on a Graph 简单题 1134 Strategic Game 简单题 1147 Formatting Text 简单题 1148 The Game 简单题 1161 Gone Fishing 简单题 1180 Self Numbers 简单题 1192 It s not a Bug, It s a Feature! 简单题 1196 Fast Food 简单题 1107 FatMouse and Cheese 简单题,不过题目描述有些混乱 1136 Multiple 简单题,BFS 1276 Optimal Array Multiplication Sequence 简单题 1255 The Path 简单题 1250 Always On the Run 简单题 1213 Lumber Cutting 简单题 1206 Win the Bonus 简单题 1479 Dweep 无聊题 1587 UP 100 无聊题,DP应该可以……但是太烦了……没做…… 1066 Square Ice 无聊题,目前已知的O(nlogn)算法要用AVL 1245 Triangles 无聊题 1022 Parallel Expectations 经典题,想了n久,最后发现可以DP,相当好的一道题 1499 Increasing Sequences 经典题{} 1039 Number Game 感觉可以直接以所有剩下的数作为状态DP,但是缺乏证明…… 1227 Free Candies SRbGa的经典题,我看了oibh上的解题报告才做出来的……:( 1234 Chopsticks SRbGa的经典题…… 图论: 1525 Air Raid 简单题,最小路径覆盖 1500 Pre-Post-erous! 简单题 1501 Knockout Tournament 简单题 1508 Intervals 对您来说应该是简单题,但我想了n久……:(,差分限制系统 1333 Galactic Import 简单题 1304 Tin Cutter 简单题,但是似乎有空间复杂度为O(n)的算法 1310 Robot 简单题 1311 Network 简单题 1344 A Mazing Problem 简单题 1395 Door Man 简单题,欧拉回路 1372 Networking 简单题 1406 Jungle Roads 简单题 1053 FDNY to the Rescue! 简单题 1055 Oh, Those Achin Feet 不错的简单题 1059 What s In a Name 简单题 1064 Roads Scholar 简单题 1082 Stockbroker Grapevine 简单题 1085 Alien Security 简单题,我觉得我当时的算法好巧妙:) 1097 Code the Tree 简单题 1060 Sorting It All Out 简单题,但是规模要是大些的话…… 1105 FatMouse s Tour 简单题 1119 SPF 简单题 1127 Roman Forts 简单题 1140 Courses 简单题 1157 A Plug for UNIX 蛮不错的简单题 1203 Swordfish 简单题 1221 Risk 简单题,最短路 1197 Sorting Slides 简单题,匹配 1268 Is It A Tree? 不错的题,图论 1273 It s Ir-Resist-Able! 简单题,图论 1298 Domino Effect 简单题,最长路 1260 King 简单题,差分限制系统…… 1291 MPI Maelstrom 不错的题,最长路 1266 Gossiping 简单题 1285 Shipping Routes 无聊题,最短路 1313 Gears on a Board 无聊题 1502 Plugged In 无聊题,匹配应该可以,但是太烦了,没做…… 1568 WishingBone s Room Plan 无聊题,最大最小匹配,不过容易看错题~~~~~~ 1077 Genetic Combinations 无聊题,匹配 1364 Machine Schedule 背诵题……匹配…… 1137 Girls and Boys 背诵题,匹配…… 1023 University Entrace Examination 经典题,但是和1576重复 1576 Marriage is Stable 经典题,感人的背景,经典的算法…… 1249 Pushing Boxes 经典题,某人论文写过,求割点和块+BFS可以在O(面积)的时间内做出 1141 Closest Common Ancestors 没有完美解决,最简单的算法就能过,但要是规模大了…… 1084 Channel Allocation 尚未完美解决,我用搜索过的,不过是不是有更好的算法呢……? 1231 Mysterious Mountain SRbGa的经典题…… 1232 Adventure of Super Mario SRbGa的经典题…… 搜索: 1002 Fire Net 简单题,CEOI2002的Guard的缩小版,搜索就可以 1003 Crashing Balloon 简单题,很faint的题目,最后发现最简单的搜索就能过 1004 Anagrams by Stack 简单题,同样faint 1320 DEL Command 简单题 1496 Best Fit 简单题 1179 Finding Rectangles 简单题 1190 Optimal Programs 简单题 1217 Eight 简单题 1204 Additive equations 简单题 1219 Pizza Anyone? 简单题 1036 Enigma 2 无聊题,终于耐心读完题目后发现是简单的搜索+模拟 1089 Lotto 无聊题 1054 For the Porsche 无聊题 1302 Ships ……题 1031 Square Destroyer 变态题,:(:(:(:(,狂剪枝才过的…… 1297 Hexagon 变态题,标准解法是搜索…… 1008 Gnome Tetravex 经典题,个人感觉是很不错的卡时搜索 1380 Microfiches 经典题!强烈推荐! 1252 Island of Logic 经典题,不过也够老了…… 1237 Fans and Gems SRbGa的经典题,变态,但是很有趣:) 模拟: 1051 A New Growth Industry 简单题 1300 Border 简单题 1326 M*A*S*H 简单题 1494 Climbing Worm 简单题 1072 Microprocessor Simulation 简单题 1098 Simple Computers 简单题 1056 The Worm Turns 简单题 1195 Blowing Fuses 简单题 1189 Numbers That Count 简单题 1144 Robbery 简单题 1153 Tournament Seeding 简单题,但是直接计算好像不行,得模拟……:( 1167 Trees on the Level 简单题 1200 Mining 简单题 1278 Pseudo-Random Numbers 简单题 1257 Parking Lot 简单题 1270 Nonstop Travel 简单题 1207 The Knight, the Princess, and the Dragons 无聊题 1169 Square Cipher 无聊题 1176 Die and Chessboard 无聊题 1178 Booklet Printing 无聊题 1009 Enigma 无聊题,但是很容易错……:( 1012 Mainframe 无聊题,但是很容易错……:( 1324 Unix ls 无聊题,输出格式没说清楚~~~~~~~ 1336 Mark-up 无聊题 1277 Transferable Voting 无聊题 1279 Cowculations 无聊题 1281 Hi-Q 无聊题 1282 Call Forwarding 无聊题 1065 Robots 变态题,太复杂啦~~~~~~~~~~~ 1208 Roll the Die! 变态题 1388 Exchanges 经典题!强烈推荐! 1236 Eat or Not to Eat? SRbGa的经典题……模拟 几何: 1575 Koch Curve 简单题 1010 Area 简单题 1565 Input 简单题 1081 Points Within 简单题 1165 Laser Lines 简单题,但是算法能否再改进呢……? 1248 Video Surveillance 简单题,李彭煦的论文中写到过,好像是某年CTSC的…… 1299 Pendulum 简单题,我蛮喜欢的:) 1090 The Circumference of the Circle 无聊题 1271 Doing Windows 无聊题 1280 Intersecting Lines 无聊题 1296 Stars 经典变态题…… 1030 Farmland 变态题……现在我都为自己当时居然能做出来感到不可思议…… 1041 Transmitters 变态题……好烦人……现在绝对没有信心再做一遍了…… 1158 Treasure Hunt 经典题,zig教会我的…… 1139 Rectangles 没有完美解决 其它: 1006 Do the Untwist 简单题 1014 Operand 简单题 1016 Parencodings 简单题 1042 W s Cipher 简单题 1047 Image Perimeters 简单题 1514 Fake Tickets 简单题 1029 Moving Tables 简单题,好像是线段树的经典题目之一,但是这题规模比较小,所以不必用。 1504 Slots of Fun 简单题 1314 Uniform Generator 简单题 1325 Palindromes 简单题 1319 Black Box 简单题,但当初我没做出来……被zig教会的……555…… 1341 LED Test 简单题 1338 Up and Down Sequences 简单题 1339 Machined Surfaces 简单题 1358 Moving Object Recognition 简单题 1392 The Hardest Problem Ever 简单题 1402 Magnificent Meatballs 简单题 1405 Tanning Salon 简单题 1414 Number Steps 简单题 1423 (Your)((Term)((Project))) 简单题 1427 An Old Stone Game 简单题 1439 Area Ratio 简单题 1449 Maximum Sum 简单题 1476 Weird Clock 简单题 1477 File Compression 简单题,不过我一直没做出来……后来被LC教会的……@&*:)…… 1481 Namenum 简单题 1482 Partitions 简单题,不过限制了空间…… 1484 Minimum Inversion Number 简单题 1493 DPCM Encoding 简单题 1495 Stacking Tower 简单题 1057 Undercut 简单题 1518 This Sentence is False 简单题,并查集 1538 Cipher 简单题 1546 Fillword 简单题,实在是有点…… 1552 Decoding Task 简单题 1061 Web Navigation 简单题 1063 Space Station Shielding 简单题 1067 Color Me Less 简单题 1068 P,MTHBGWB 简单题 1071 Follow My Logic 简单题,但很可爱:) 1074 To the Max 简单题 1075 Set Me 简单题 1079 Robotic Jigsaw 简单题,和我推荐的那题不同,这个题说了可以根据条件确定拼法 1083 Frame Stacking 简单题 1088 System Overload 简单题,约瑟夫环 1091 Knight Moves 简单题 1095 Humble Numbers 简单题 1188 DNA Sorting 简单题 1171 Sorting the Photos 简单题 1156 Unscrambing Images 简单题 1142 Maze 简单题 1128 Atlantis 简单题 1120 Chairlift 简单题 1122 Clock 简单题 1125 Floating Point Numbers 简单题 1117 Entropy 简单题 1109 Language of FatMouse 简单题,Dictionary的实现…… 1143 Data Bugs 简单题 1146 LC-Display 简单题,LC…… 1159 487-3279 简单题 1164 Software CRC 简单题 1168 Function Run Fun 简单题 1191 The Die Is Cast 简单题,并查集/bfs 1286 Slurpys 不错的简单题 1292 Integer Inquiry 简单题 1293 Floppies 简单题 1294 Golf 简单题 1295 Reverse Text 简单题 1274 Getting Chorded 简单题 1251 Box of Bricks 简单题 1244 Definite Values 简单题 1242 Carbon Dating 简单题 1240 IBM Minus One 简单题 1201 Inversion 简单题 1205 Martian Addition 简单题 1210 Reciprocals 简单题 1246 Instant Complexity 简单题,好像是某年CTSC的…… 1259 Rails 简单题,构造 1033 Ambiguous Dates 无聊题 1046 Double Vision 无聊题,直接枚举就可以了,但是有一些很faint的极端情况 1485 Messy Matrix 无聊题,河北老前辈出的,麻烦的构造~~~~~~ 1111 Poker Hands 无聊题 1118 N-Credible Mazes 无聊题,题义实在费解…… 1126 Bio-Informatics 无聊题 1150 S-Trees 无聊题 1209 April Fool s Joke 无聊题 1267 Mapping the Route 无聊题 1263 Time 无聊题 1275 Run, Run, Runaround Numbers 无聊题 1283 Making the Grade 无聊题 1440 Bone Sort 背诵题,排序+最长不xx子序列,而且很容易看错~~~~~~~ 1025 Wooden Sticks 背诵题,排序+最长不xx子序列…… 1108 FatMouse s Speed 背诵题,排序+最长不xx子序列…… 1256 What Day Is It? 变态题,原来现行历法这么复杂……faint…… 1265 Append 经典题 1384 Alice and Bob 经典题 1390 Gates 经典题!强烈推荐! 1087 Cracking the Code 经典题,不过要是能做成Output Only就更好了…… 1069 Plato s Blocks 经典题,没有解决得非常完美…… 1102 Phylogenetic Trees Inherited 经典题,贪心 1130 Ouroboros Snake 经典题,构造 1101 Gamblers 尚未完美解决,我开了巨大的hash才过的:( 1498 Galactic Breakup 尚未完美解决……有没有“拆查集”? 1019 Illusive Chase 没给规模,感觉有比较好的算法,最后弱智算法居然0.01秒通过
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值