HDU5012 Dice 記憶化搜尋,hdu5012dice
寫錯了,坑了自己好久,直接廣搜可能更好,我害怕逾時,記憶化搜尋了一下 ,寫的時候小地方寫錯了,
int dp[7][7][7][7][7][7];int su,sd,sl,sr,sf,sb;int eu,ed,el,er,ef,eb;void init() {memset(dp,-1,sizeof(dp));}bool input() {while(cin>>su>>sd>>sl>>sr>>sf>>sb) {cin>>eu>>ed>>el>>er>>ef>>eb;return false;}return true;}bool flag;int dfs(int up,int down,int left,int right,int front,int behind) {if(dp[up][down][left][right][front][behind] != -1)return dp[up][down][left][right][front][behind];if(up == eu && down == ed && left == el && right == er && front == ef && behind == eb) {flag = true;return dp[up][down][left][right][front][behind] = 0;}int tmp = inf;dp[up][down][left][right][front][behind] = inf;tmp = min(tmp,dfs(right,left,up,down,front,behind));//ltmp = min(tmp,dfs(left,right,down,up,front,behind));//rtmp = min(tmp,dfs(behind,front,left,right,up,down));//ftmp = min(tmp,dfs(front,behind,left,right,down,up));//breturn dp[up][down][left][right][front][behind] = tmp + 1;}void cal() {flag = false;if(su == eu && sd == ed && sl == el && sr == er && sf == ef && sb == eb){puts("0");return ;}dfs(su,sd,sl,sr,sf,sb);if(flag)cout<<dp[su][sd][sl][sr][sf][sb]<<endl;else puts("-1");}void output() {}int main() {while(true) {init();if(input())return 0;cal();output();}return 0;}/*1 2 3 4 5 65 6 3 4 2 11 2 3 4 5 61 2 6 5 4 31 2 3 4 5 62 1 3 4 6 51 2 3 4 5 61 2 5 6 3 41 2 3 4 5 66 5 3 4 1 21 2 3 4 5 64 3 6 5 1 26 5 4 3 2 14 3 5 6 2 12 1 3 4 5 65 6 3 4 1 22 1 3 4 5 61 2 3 4 6 51 2 3 4 5 64 3 2 1 6 53 4 1 2 6 54 3 5 6 2 14 3 5 6 2 15 6 3 4 2 11 2 3 4 5 6 1 2 4 3 6 5ans:1-12-112112331*/