ZOJ 2416题解BFS
2012-02-26 11:49
330 查看
思路:此题属于隐式图的搜索,从1111出发发散成一个 树状结构从每一层中搜索看是否由于目标相等的数,有责打 印无责要还原;先对每个数加1,再减1,最后左右互换; #include<cstdio> #include<cstring> #include<iostream> #include<cstdlib> #include<queue> using namespace std; typedef struct { int data; int step; }State;//结构体存放步长和数据; int Equal(State s1, State s2)//判断两个数相等 { if(s1.data == s2.data) return 1; return 0; } int visit[10000], a[5], b[5]; queue<State>q; int main() { int i, ncases; State start, end; scanf("%d", &ncases); while( ncases-- ) { memset(visit, 0, sizeof(visit)); scanf("%d %d", &start.data, &end.data); visit[start.data] = 1; start.step = 0; q.push(start); while( !q.empty() ) { State u = q.front(); q.pop(); if( Equal(u, end) ) { printf("%d\n", u.step); break; } for(i=0; i<4; i++) { b[i] = a[i] = u.data % 10; u.data = u.data/10; } for(i=0; i<4; i++) { State v = u; v.step = u.step + 1; b[i] = a[i]%9 + 1; v.data = b[3]*1000 + b[2]*100 + b[1]*10 + b[0]; if( !visit[v.data] ) { q.push(v); visit[v.data] = 1; } b[i] = a[i];//还原 b[i]--; if(b[i] == 0) b[i] = 9; v.data = b[3]*1000 + b[2]*100 + b[1]*10 + b[0]; if( !visit[v.data] ) { q.push(v); visit[v.data] = 1; } b[i] = a[i]; } for(i=0; i<3; i++) { b[i] = a[i+1]; b[i+1] = a[i]; State v = u; v.step = u.step + 1; v.data = b[3]*1000 + b[2]*100 + b[1]*10 + b[0]; if( !visit[v.data] ) { q.push(v); visit[v.data] = 1; } b[i] = a[i]; b[i+1] = a[i+1]; } } while( !q.empty() ) { q.pop(); } } return 0; }
相关文章推荐
- bfs ZOJ 2416 Open the Lock
- zoj 2416 Open the Lock(BFS~)
- ZOJ 2416 Open the Lock (BFS)
- ZOJ 3781 Paint the Grid Reloaded ( BFS(重点是对问题的分析) )
- ZOJ 3620 Escape Time II(BFS)
- 2018.1.27【ZOJ - 1709】解题报告(BFS)
- ZOJ 3781 Paint the Grid Reloaded 题解 (dfs缩点+BFS)
- ZOJ-1005-Jugs【BFS+记录路径】
- ZOJ第一题_1649Rescue(优先队列下的BFS)
- ZOJ-1649 Rescue BFS (HDU 1242)
- ZOJ 3736 Pocket Cube 脑补+BFS
- ZOJ - 3890 Wumpus(BFS基础题)
- ZOJ 1649 BFS
- ZOJ 1430 / POJ 2679 The Erythea Campaign (bfs+dijkstra)
- zoj 1649 BFS
- ZOJ 3820 Building Fire Stations 求中点+树的直径+BFS
- POJ 3346 && HDU 2416 Treasure of the Chimp Island(bfs)
- ZOJ 2081 Mission Impossible(BFS+DFS)
- ZOJ 2887 Server Relocation(BFS)
- ZOJ 1129 Erdos Numbers(bfs)