码迷,mamicode.com
首页 > 其他好文 > 详细

[Uva 10085] The most distant state (BFS)

时间:2014-11-28 06:10:33      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   sp   for   

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1026

题目大意:就是说给你一个8数码,问你能够达到的距离最远的状态是什么。

 

刚开始以为只要顺着一边走就行了,后来发现这样走可能最远到达的状态也能通过其他方式到达。

在这里WA了好多次。

 

应该把所有可能出现的情况全都枚举出来,然后判重。。

 

UVA也真是慢。。4s的代码跑了快4分钟。。。

 

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cstdlib>
 5 #include <algorithm>
 6 #include <map>
 7 #include <set>
 8 #include <queue>
 9 #include <string>
10 using namespace std;
11 typedef unsigned long long ull;
12 
13 const int B = 10;
14 
15 struct Node{
16     int status[3][3];
17     int h;
18     int x,y;
19     string route;
20 };
21 
22 int T;
23 int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
24 
25 
26 int main(){
27     scanf("%d",&T);
28     for(int t=1;t<=T;t++){
29         Node s;
30         s.h = 0;
31         set<int> se;
32         for(int i=0;i<3;i++){
33             for(int j=0;j<3;j++){
34                 scanf("%d",&s.status[i][j]);
35                 s.h = s.h*10+s.status[i][j];
36                 if( s.status[i][j] == 0){
37                     s.x = i; s.y = j;
38                 }
39             }
40         }
41         se.insert(s.h);
42 //        printf("%d\n",s.h);
43         s.route = "";
44         queue<Node> q;
45         q.push(s);
46         Node ans = s;
47         bool fl = true;
48         while(!q.empty()){
49             Node tn = q.front(); q.pop();
50             if( fl || ans.route.size()<tn.route.size()) ans = tn;
51             for(int i=0;i<4;i++){
52                 Node t = tn;
53                 int dx = t.x+dir[i][0], dy = t.y+dir[i][1];
54                 if( dx<=2&&dx>=0&&dy<=2&&dy>=0 ){
55                     swap(t.status[tn.x][tn.y],t.status[dx][dy]);
56                     t.x = dx; t.y = dy;
57                     int tt = 0;
58                     for(int i=0;i<3;i++){
59                         for(int j=0;j<3;j++){
60                             tt = tt*B+t.status[i][j];
61                         }
62                     }
63                     t.h = tt;
64 
65                     if( i==0 ) t.route = tn.route+"D";
66                     else if( i==1 ) t.route = tn.route+"U";
67                     else if( i==2 ) t.route = tn.route+"R";
68                     else if( i==3 ) t.route = tn.route+"L";
69                     if( se.find(tt)==se.end() ){
70                         se.insert(tt);
71                         q.push(t);
72                     }
73                 }
74             }
75         }
76         printf("Puzzle #%d\n",t);
77         for(int i=0;i<3;i++) for(int j=0;j<3;j++){
78             printf(j==2?"%d\n":"%d ",ans.status[i][j]);
79         }
80         puts(ans.route.c_str());
81         puts("");
82     }
83     return 0;
84 }

 

[Uva 10085] The most distant state (BFS)

标签:style   blog   http   io   ar   color   os   sp   for   

原文地址:http://www.cnblogs.com/llkpersonal/p/4127586.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!