1008 Gnome Tetravex

练习使用DPS的题,不知道有无别的做法,思路不复杂。形式是统计并且进行数字配对。

 1 #include <stdio.h>
 2
 3 int m,n,f,sub[25][4],note[25],ans[25];
 4
 5 void ini(){
 6     int i,j,top,right,bottom,left;
 7     for(i=0;i<25;i++){
 8         for(j=0;j<4;j++)
 9             sub[i][j]=0;
10         note[i]=0;
11         ans[i]=0;
12     }
13     m=0;
14     f=n*n;
15     for(i=0;i<f;i++){
16         scanf("%d %d %d %d",&top,&right,&bottom,&left);
17            for(j=0;j<m;j++){
18             if(sub[j][0]==top&&sub[j][1]==right&&sub[j][2]==bottom&&sub[j][3]==left){
19                 note[j]++;
20                 break;
21             }
22         }
23         if(j==m){
24             sub[m][0]=top;
25             sub[m][1]=right;
26             sub[m][2]=bottom;
27             sub[m][3]=left;
28             note[m]=1;
29             m++;
30         }
31     }
32 }
33
34 int DPS(int pos){
35     if(pos==f)
36         return 1;
37     else{
38         int i;
39         for(i=0;i<m;i++){
40             if(note[i]){
41                 if(pos>=n)
42                     if(sub[ans[pos-n]][2]!=sub[i][0])
43                         continue;
44                 if(pos%n!=0)
45                     if(sub[ans[pos-1]][1]!=sub[i][3])
46                         continue;
47                 note[i]--;
48                 ans[pos]=i;
49                 if(DPS(pos+1))
50                      return 1;
51                 note[i]++;
52             }
53         }
54     }
55     return 0;
56 }
57
58 int main(){
59     int index=1;
60     while(1){
61         scanf("%d",&n);
62         if(!n)
63             break;
64         ini();
65         if(index>1)
66             printf("\n");
67         printf("Game %d: ",index++);
68         if(DPS(0))
69             printf("Possible\n");
70         else
71             printf("Impossible\n");
72     }
73     return 0;
74 }
时间: 2024-12-28 01:33:28

1008 Gnome Tetravex的相关文章

ZOJ 1008 Gnome Tetravex (DFS + 剪枝)

Gnome Tetravex 题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=8 题意:有N*N个方格,每个方格分为上下左右四个部分,每个部分填数字.现在要求重排方块,使得每两个有边相连的方块对应的数字相同. 思路:就是一个简单的搜索,我想了个剪枝,将上下左右四个方向上每个数字对应的是哪几个方块记录下来,但是这个剪枝并没有起很大的作用,还是T了.后来才发现,如果有很多个方块是相同的,会重复搜索,所以需要将相同的方块一起处

zoj 1008 Gnome Tetravex (dfs+枚举)

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 m

ZOJ Problem Set - 1008 Gnome Tetravex (DFS+剪枝)

ZOJ Problem Set - 1008 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 divide

ZOJ 1008 Gnome Tetravex(DFS)

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 m

[ZOJ 1008]Gnome Tetravex (dfs搜索 + 小优化)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1008 题目大意:给你n*n的矩阵,每个格子里有4个三角形,分别是上右下左,每个三角形里面标记了数字,问你能否通过移动这n*n个格子,使得相邻两个三角形具有相同的数字? dfs暴搜,dfs(x,y)代表当前要放(x,y)这个位置. 然后枚举给定的每个格子. 如果说可以放,就dfs下一个格子. 这一道题需要把相同的格子压缩起来,也就是说为了节省时间,可以记录相同的格

zoj 1008 Gnome Tetravex

开放式存储阵列为每平方米有几个,否则,超时-- #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <set> #include <map> #include <st

ZOJ1008 Gnome Tetravex(DFS)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1008 题意: 哈特近来一直在玩有趣的 Gnome Tetravex 游戏.在游戏开始时,玩家会得到 n×n(n≤5) 个正方形.每个正方形都被分成 4个标有数字的三角形(数字的范围是 0到9).这四个三角形分 别被称为"左三角形"."右三角形"."上三角形"和"下三角形".例如,图 2.12(

ZOJ1008 Gnome Tetravex

DFS+剪枝~ #include<bits/stdc++.h> using namespace std; int a[30][4]; int N; int cnt; int c[30]; int p[30]; unordered_map<long long,int> pos; bool dfs (int v) { if (v==N*N) return true; for (int i=0;i<cnt;i++) { if (c[i]==0) continue; if (v%N!

POJ百道水题列表

以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight Moves1101 Gamblers1204 Additive equations 1221 Risk1230 Legendary Pokemon1249 Pushing Boxes 1364 Machine Schedule1368 BOAT1406 Jungle Roads1411 Annive