标签:des style http io os ar for art div
1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 5 6 4 3 1 2 3 4 5 6 1 4 2 5 3 6
0 3 -1 题意:求起始到终态的步骤 思路:简单的BFS+判重,注意判重数组开准点#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std; const int maxn = 6; struct Node{ int arr[maxn], step; Node() { memset(arr, 0, sizeof(arr)); step = 0; } }start, end; int vis[maxn*200000]; int cal(Node a) { int num = 0; for (int i = 0; i < maxn; i++) { num = num * 10 + a.arr[i]; } return num; } bool equal(Node a, Node b) { for (int i = 0; i < maxn; i++) if (a.arr[i] != b.arr[i]) return false; return true; } Node turn(Node a, int i) { Node c; if (i == 1) { c.arr[0] = a.arr[3]; c.arr[1] = a.arr[2]; c.arr[2] = a.arr[0]; c.arr[3] = a.arr[1]; c.arr[4] = a.arr[4]; c.arr[5] = a.arr[5]; } if (i == 2) { c.arr[0] = a.arr[2]; c.arr[1] = a.arr[3]; c.arr[2] = a.arr[1]; c.arr[3] = a.arr[0]; c.arr[4] = a.arr[4]; c.arr[5] = a.arr[5]; } if (i == 3) { c.arr[0] = a.arr[5]; c.arr[1] = a.arr[4]; c.arr[2] = a.arr[2]; c.arr[3] = a.arr[3]; c.arr[4] = a.arr[0]; c.arr[5] = a.arr[1]; } if (i == 4) { c.arr[0] = a.arr[4]; c.arr[1] = a.arr[5]; c.arr[2] = a.arr[2]; c.arr[3] = a.arr[3]; c.arr[4] = a.arr[1]; c.arr[5] = a.arr[0]; } return c; } int bfs() { memset(vis, 0, sizeof(vis)); queue<Node> q; q.push(start); Node tmp; vis[cal(start)] = 1; while (!q.empty()) { tmp = q.front(); q.pop(); if (equal(tmp, end)) { return tmp.step; } for (int i = 1; i <= 4; i++) { Node c; c = turn(tmp, i); if (!vis[cal(c)]) { c.step = tmp.step + 1; vis[cal(c)] = 1; q.push(c); } } } return -1; } int main() { while (scanf("%d", &start.arr[0]) != EOF) { for (int i = 1; i < maxn; i++) scanf("%d", &start.arr[i]); for (int i = 0; i < maxn; i++) scanf("%d", &end.arr[i]); printf("%d\n", bfs()); } return 0; }
标签:des style http io os ar for art div
原文地址:http://blog.csdn.net/u011345136/article/details/39276809