<html>

非常水的暴力,直接暴即可,连剪枝都不须要 。 紫书上描写叙述的非常少,仅仅看紫书肯定认为不知所云,建议大家读读原文 。 看好输入输出格式,明确了题目意思就非常好做了 。

大致的意思就是假设相邻的两个数字能够出现上面的组合就能换成相应的骨牌,可是要注意,随意答案中仅仅能出现2个骨牌的值同样。所以加个数组判重即可了。

细节參见代码:

#include<bits/stdc++.h>
using namespace std;
int kase = 0,vis[10][10],a[10][10],cnt,ans,cur[10][10],val[10][10],v[10][10];
int dx[] = {0,1};
int dy[] = {1,0};
void in() {
    int cnt = 1;
    for(int i=0;i<=6;i++)
        for(int j=i;j<=6;j++) val[i][j] = val[j][i] = cnt++;
}
void init() {
    memset(v,0,sizeof(v));
    memset(vis,0,sizeof(vis));
    for(int i=2;i<=8;i++) scanf("%d",&a[1][i]);
        for(int i=2;i<=7;i++)
            for(int j=1;j<=8;j++) scanf("%d",&a[i][j]);
    if(kase) printf("\n\n\n");
    printf("Layout #%d:\n\n",++kase);
    for(int i=1;i<=7;i++) {
        for(int j=1;j<=8;j++) printf("%4d",a[i][j]);
        printf("\n");
    }
    printf("\nMaps resulting from layout #%d are:\n\n",kase);
}
void dfs(int r,int c,int t) {
    if(t == 28) {
        ans ++;
        for(int i=1;i<=7;i++){
            for(int j=1;j<=8;j++) printf("%4d",cur[i][j]);
            printf("\n");
        } printf("\n");
        return ;
    }
    if(c > 8) { c = 1; r++; }
    if(vis[r][c]) {
        dfs(r,c+1,t); return ;
    }
    for(int i = 0 ; i < 2; ++i) {
        int x = r + dx[i];
        int y = c + dy[i];
        if(x > 7 || y > 8 ) continue;
        if(!vis[x][y]&&!v[a[r][c]][a[x][y]]) {
            vis[r][c] = vis[x][y] = 1;
            cur[r][c] = cur[x][y] = v[a[r][c]][a[x][y]] = v[a[x][y]][a[r][c]] = val[a[r][c]][a[x][y]];
            dfs(r,c+1,t+1) ;
            vis[r][c] = vis[x][y] = v[a[r][c]][a[x][y]] = v[a[x][y]][a[r][c]] = 0;
        }
    }
    return ;
}
int main() {
    in();
    while(~scanf("%d",&a[1][1])) {
        ans = 0;
        init();
        dfs(1,1,0);
        printf("There are %d solution(s) for layout #%d.\n",ans,kase);
    }
    return 0;
}


版权声明:本文为博主原创文章。未经博主同意不得转载。

举报

  • 本文已收录于下面专栏:

相关文章推荐

UVA 211(p215)----The Domino Effect

#include #include #include #include #define debu using namespace std; const int maxn=50; const int d...

uva 211 - The Domino Effect(DFS)

题目链接:uva 211 - The Domino Effect <p

uva-211-The Domino Effect

http://uva.onlinejudge.org/external/2/211.html http://uva.onlinejudge.org/external/2/211.pdf 题意:每一...

The Domino Effect UVA - 211

题目传送门题意:给你28个多米诺骨牌,每个多米诺骨牌都有两个数字,然后给你一个7*8的网格,每个网格上面都有一个数字,要求用这28个多米诺骨牌铺满整个网格,骨牌能够横着摆放也能够竖着摆放,问有多少...
  • 微博
    微信
    QQ
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多仅仅同意输入30个字)

posted @ 2017-08-19 11:47  clnchanpin  阅读(164)  评论(0编辑  收藏  举报