810 - A Dicey Problem (UVA)

题目链接如下:

https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=10&page=show_problem&problem=751

这道题真的让我很沮丧.....写了很久才AC就不提了,写完后看别人题解说水题....然后发现自己确实给自己找了很多麻烦来解这个题....给出一个骰子的top和face,明明只需要再确定一个面就能确定整个骰子的情况,我却傻乎乎费了很多劲把所有情况列出来了..真的太愚蠢了。脑子里都是雾....

我的愚蠢代码如下:

#include 
#include 
#include 
#include 
#include 
#define debug

std::string maze;
int R, C, startR, startC, a, b;
int mat[10][10];
bool vis[10][10][24];
std::map mp;
int du[] = {0, 0, -1, 1};
int dv[] = {-1, 1, 0, 0};

bool dfs(std::string ss, int r, int c, std::vector> path){
    path.push_back({r, c});
    if (path.size() != 1 && r == startR - 1 && c == startC - 1){
        for (int i = 0; i < path.size(); ++i){
            if (i % 9 == 0){
                printf("  ");
            }
            printf("(%d,%d)%s%s", path[i].first + 1, path[i].second + 1, i == path.size() - 1 ? "" : ",", i % 9 == 8 || i == path.size() - 1 ? "\n" : "");
        }
        return true;
    }
    if (path.size() != 1){
        vis[r][c][mp[ss]] = true;
    }
    for (int i = 0; i < 4; ++i){
        int tempR = r + du[i];
        int tempC = c + dv[i];
        std::string tempS;
        switch (i){
            case 0: tempS = ss.substr(5, 1) + ss.substr(1, 1) + ss.substr(4, 1) + ss.substr(3, 1) + ss.substr(0, 1) + ss.substr(2, 1); break;
            case 1: tempS = ss.substr(4, 1) + ss.substr(1, 1) + ss.substr(5, 1) + ss.substr(3, 1) + ss.substr(2, 1) + ss.substr(0, 1); break;
            case 2: tempS = ss.substr(1, 1) + ss.substr(2, 1) + ss.substr(3, 1) + ss.substr(0, 1) + ss.substr(4, 1) + ss.substr(5, 1); break;
            case 3: tempS = ss.substr(3, 1) + ss.substr(0, 1) + ss.substr(1, 1) + ss.substr(2, 1) + ss.substr(4, 1) + ss.substr(5, 1); break;
        }
        if (mp.find(tempS) == mp.end()){
            mp[tempS] = mp.size();
        }
        if (tempR >= 0 && tempR <= R - 1 && tempC >= 0 && tempC <= C - 1 && !vis[tempR][tempC][mp[tempS]] && (mat[tempR][tempC] == -1 || mat[tempR][tempC] == ss[0] - '0')){
            if(dfs(tempS, tempR, tempC, path)){
                return true;
            }
        }
    }
    return false;
}

int main(){
    #ifdef debug
    freopen("0.txt", "r", stdin);
    freopen("1.txt", "w", stdout);
    #endif
    while (std::cin >> maze && maze != "END"){
        printf("%s\n", maze.c_str());
        scanf("%d %d %d %d %d %d", &R, &C, &startR, &startC, &a, &b);
        for (int i = 0; i < R; ++i){
            for (int j = 0; j < C; ++j){
                scanf("%d", mat[i] + j);
                for (int k = 0; k < 24; ++k){
                    vis[i][j][k] = false;
                }
            }
        }
        int temp = a * 10 + b;
        std::string start;
        switch (temp){
            case 12: start = "126543"; break;
            case 13: start = "136425"; break;
            case 15: start = "156234"; break;
            case 14: start = "146352"; break;
            case 21: start = "215634"; break;
            case 24: start = "245316"; break;
            case 26: start = "265143"; break;
            case 23: start = "235461"; break;
            case 32: start = "324516"; break;
            case 36: start = "364125"; break;
            case 35: start = "354261"; break;
            case 31: start = "314652"; break;
            case 41: start = "413625"; break;
            case 42: start = "423561"; break;
            case 46: start = "463152"; break;
            case 45: start = "453216"; break;
            case 51: start = "512643"; break;
            case 53: start = "532416"; break;
            case 56: start = "562134"; break;
            case 54: start = "542361"; break;
            case 62: start = "621534"; break;
            case 63: start = "631452"; break;
            case 65: start = "651243"; break;
            case 64: start = "641325"; break;
        }
        std::vector> path;
        if (!dfs(start, startR - 1, startC - 1, path)){
            printf("  No Solution Possible\n");
        }
    }
    #ifdef debug
    fclose(stdin);
    fclose(stdout);
    #endif
    return 0;
}

你可能感兴趣的:(UVA,算法)