zoj 1008 DFS

简介: #include<stdio.h>int n,q;int jk[25][4];int state[25];int result[25];void initial(){ int i,j; for(i=0; i<25; i++) { for(j=0; j<4; j++) jk[i][j]=0;
#include<stdio.h>
int n,q;
int jk[25][4];
int state[25];
int result[25];
void initial()
{
    int i,j;
    for(i=0; i<25; i++)
    {
        for(j=0; j<4; j++)
            jk[i][j]=0;
        state[i]=0;
        result[i]=0;
    }
    q=0;
}
int dfs(int ipos)
{
    int i;
    if(ipos==n*n)
        return 1;
    else
    {
        for(i=0; i<q; i++)
        {
            if(state[i]==0)
                continue;
            else
            {
                if(ipos>=n&&jk[result[ipos-n]][2]!=jk[i][0])
                        continue; // 如果有前一行,且前一行的正方形的下边与其的上边不相等,跳过。
                if(ipos%n!=0&&jk[result[ipos-1]][1]!=jk[i][3])
                        continue; //如果有前一排,且前一排的正方形的右边与其的左边不相等,跳过。
                state[i]--;
                result[ipos]=i;
                if(dfs(ipos+1)==1)
                    return 1;
                state[i]++;
            }
        }
    }
    return 0;
}
int main()
{
   //freopen("input.txt","r",stdin);
    int i,j,index;
    index=0;
    int top,right,bottom,left;
    scanf("%d",&n);
    while(n)
    {
        initial();
        index++;
        for(i=0; i<n*n; i++)
        {
            scanf("%d %d %d %d",&top,&right,&bottom,&left);
            for(j=0; j<q; j++)
            {
                if(jk[j][0]==top&&jk[j][1]==right&&jk[j][2]==bottom&&jk[j][3]==left)
                {
                    state[j]++;
                    break;
                }
            }
            if(j==q)
            {
                jk[q][0]=top;
                jk[q][1]=right;
                jk[q][2]=bottom;
                jk[q][3]=left;
                state[q]=1;
                q++;
            }
        }
        if(index>1)
            printf("\n");
        printf("Game %d: ",index);
        if(dfs(0))
            printf("Possible\n");
        else
            printf("Impossible\n");
        scanf("%d",&n);
    }
    return 0;
}

目录
相关文章
|
算法
1091 zoj Knight Moves的BFS算法和DFS
1091 zoj Knight Moves的BFS算法和DFS
70 0
CF708C-Andryusha and Colored Balloons(dfs)
CF708C-Andryusha and Colored Balloons(dfs)
105 0
HDOJ 1081(ZOJ 1074) To The Max(动态规划)
HDOJ 1081(ZOJ 1074) To The Max(动态规划)
86 0
HDOJ 1081(ZOJ 1074) To The Max(动态规划)
|
机器学习/深度学习
|
BI 人工智能
|
人工智能 机器学习/深度学习
POJ 1775 (ZOJ 2358) Sum of Factorials
Description John von Neumann, b. Dec. 28, 1903, d. Feb. 8, 1957, was a Hungarian-American mathematician who made important contributions t...
1156 0
zoj 1586 prim
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=586 #include &lt;cstdio&gt; #include &lt;cstring&gt; #define MAX 1000000 int Edge[1010][1010]; int adapter[1010]; int lowcost[1010]
982 0

热门文章

最新文章