ZOJ1008 Gnome Tetravex

Posted zhanglichen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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("
");
        T++;
        if (dfs(0)) printf ("Game %d: Possible
",T);
        else printf ("Game %d: Impossible
",T);
    }
    return 0;
}

 

以上是关于ZOJ1008 Gnome Tetravex的主要内容,如果未能解决你的问题,请参考以下文章

ZOJ1008 一个简单的dfs回溯问题,为啥老是出现超时错误,我和同样可以通过的代码思路基本一样

Alt 键快捷键在 Vim 的 gnome 终端上不起作用

vnc 远程桌面连上去,一片空白啥都没有的解决办法

启动 gnome 终端时返回代码 8

群赛 ZOJ3741(dp) ZOJ3911(线段树)

代码块停止使用 gnome-terminal (linux) 执行