zoukankan      html  css  js  c++  java
  • hdu 2514 Another Eight Puzzle

    题意:题中给的图填上1~8 八个数字,相连的点不能填上连续的数字

    分析:各种限制条件,直接dfs了

    View Code
    #include<iostream>
    #include<algorithm>
    #include<math.h>
    using namespace std;
    bool g[10][10],fil[10];
    //g[10][10]记录点与点之间是否相连,fil[10]记录该数字是否已经选过
    int a[10],ans[10],num;
    //ans[]保存路径
    void dfs(int deep,int move[])
    {
    if(deep==8)//选完了
    {
    if(!num)//保存第一个答案
    {
    for(int i=0;i<8;i++)
    ans[i]=move[i];
    }
    num++;
    return ;
    }
    else if(a[deep]>0)//该点已经给定了数字,直接往下搜
    {
    move[deep]=a[deep];
    dfs(deep+1,move);
    }
    else {
    for(int i=1;i<=8;i++)//枚举8个数字
    {
    if(fil[i])//该数字已经选过
    continue;
    int flag=0;
    for(int j=0;j<8;j++)//枚举八个点
    {
    if(g[deep][j] && ((move[j]>0 &&abs(move[j]-i)==1)||(a[j]>0 && abs(a[j]-i)==1)) )//若该点与当前点相连&& 已经选了数字 && 差值等于1
    {
    flag=1;break;
    }
    }
    if(flag) continue;
    move[deep]=i;fil[i]=true;
    dfs(deep+1,move);
    if(num>1)return ;
    move[deep]=0;fil[i]=false;
    }
    }
    }

    void init()
    {
    memset(g,false,sizeof(g));
    for(int i=0;i<8;i++)
    g[i][i]=true;
    for(int i=1;i<=3;i++)
    g[i][0]=g[0][i]=true;
    g[1][2]=g[2][1]=true;
    g[1][4]=g[4][1]=true;
    g[1][5]=g[5][1]=true;
    for(int i=3;i<=6;i++)
    g[2][i]=g[i][2]=true;
    g[3][5]=g[5][3]=true;
    g[3][6]=g[6][3]=true;
    g[4][5]=g[5][4]=true;
    g[4][7]=g[7][4]=true;
    g[5][6]=g[6][5]=true;
    g[5][7]=g[7][5]=true;
    g[6][7]=g[7][6]=true;
    }
    int main()
    {
    init();
    int cas=0,T;
    scanf("%d",&T);
    while(T--)
    {
    memset(fil,false,sizeof(fil));
    for(int i=0;i<8;i++)
    {
    scanf("%d",&a[i]);
    fil[a[i]]=true;
    }
    int move[10]={0};
    num=0;
    dfs(0,move);
    printf("Case %d: ",++cas);
    if(num==0)
    printf("No answer\n");
    else if(num>1)
    printf("Not unique\n");
    else {
    printf("%d",ans[0]);
    for(int i=1;i<8;i++)
    printf(" %d",ans[i]);
    puts("");
    }
    }
    return 0;
    }
  • 相关阅读:
    手势
    ios提示框,自动消失
    UITableView
    UIAlertView
    微信公众号主页链接
    试用avalon2.0
    VirtualPathProvider的使用
    代码暂存 [获取二唯码并识别保存二唯码]
    提交数据url太长导致提交失败
    打通前后台
  • 原文地址:https://www.cnblogs.com/nanke/p/2351174.html
Copyright © 2011-2022 走看看