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!=0&&a[p[v-1]][1]!=a[i][3]) continue;
        if (v/N!=0&&a[p[v-N]][2]!=a[i][0]) continue;
        p[v]=i;
        c[i]--;
        if (dfs(v+1)) return true;
        else c[i]++;
    }
    return false;
}
int main () {
    int T=0;
    while (scanf("%d",&N)&&N) {
        pos.clear();
        cnt=0;
        int u,d,l,r,k;
        for (int i=0;i<N*N;i++) {
            scanf("%d %d %d %d",&u,&r,&d,&l);
            for (k=0;k<cnt;k++) {
                if(u==a[k][0]&&r==a[k][1]&&d==a[k][2]&&l==a[k][3]) break;
            }
            if (k==cnt) {
                cnt++;
                a[k][0]=u;
                a[k][1]=r;
                a[k][2]=d;
                a[k][3]=l;
                c[k]=1;
            }
            else c[k]++;
        }
        if (T!=0) printf("\n");
        T++;
        if (dfs(0)) printf ("Game %d: Possible\n",T);
        else printf ("Game %d: Impossible\n",T);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/zhanglichen/p/12311242.html

时间: 2024-08-07 00:46:47

ZOJ1008 Gnome Tetravex的相关文章

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(

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 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

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

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

[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下一个格子. 这一道题需要把相同的格子压缩起来,也就是说为了节省时间,可以记录相同的格

ZOJ1008

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