1225 digital difficulties, 1225 digital

Source: Internet
Author: User

1225 digital difficulties, 1225 digital
DescriptionDescription

Yours and zero are studying A * heuristic algorithm. They get A classic A * problem, but they won't. Please help them.
Problem description

There are eight pawns on the three × 3 board, each of which is labeled with a number ranging from 1 to 8. There is a space in the Board, and the space is expressed as 0. The pawns around spaces can be moved to spaces. The problem to be solved is: give an initial layout (Initial State) and a target layout (to make the question simple, set the target State to 123804765), and find a method to move at least steps, transform from initial layout to target layout.

Input description Input Description

Enter the initial test status. There are nine numbers in a row, and the space is expressed as 0.

Output description Output Description

There is only one row, and this row has only one number, indicating the minimum number of moves required from the initial status to the target status (test data does not have special data that cannot reach the target status)

Sample Input Sample Input

283104765

Sample output Sample Output

4

Data range and prompt Data Size & Hint

For more information, see questions.

CATEGORY tag Tags click here to expand

 

Search + hash
  1 #include<iostream>  2 #include<cstdio>  3 #include<cstdlib>  4 using namespace std;  5 const int MAXN=5;  6 int xx[5]={-1,+1,0,0};  7 int yy[5]={0,0,-1,+1};  8 struct node  9 { 10     int mp[MAXN][MAXN]; 11 }a[100001]; 12 int hashfind[3733801]; 13 int step[200]; 14 int h=0,t=1; 15 int bc[MAXN][MAXN]={{0,0,0,0},{0,1,2,3},{0,8,0,4},{0,7,6,5}}; 16 int hash() 17 { 18     int s=0; 19     int k=1; 20     for(int i=1;i<=3;i++) 21     { 22         for(int j=1;j<=3;j++) 23         { 24             s=s+a[t].mp[i][j]*k; 25             k=k*7; 26         } 27     } 28     s=s%3733801; 29     if(hashfind[s]==0) 30     { 31         hashfind[s]=1; 32         return 1; 33     } 34     else 35     { 36         return 0; 37     } 38 } 39 int check() 40 { 41     for(int i=1;i<=3;i++) 42     { 43         for(int j=1;j<=3;j++) 44         { 45             if(a[t].mp[i][j]!=bc[i][j]) 46             return 0; 47         } 48     } 49     return 1; 50 } 51 void move(int x,int y) 52 { 53      54     for(int i=0;i<4;i++) 55     { 56         int wx=x+xx[i]; 57         int wy=y+yy[i]; 58         if(wx>=1&&wx<=3&&wy>=1&&wy<=3) 59         { 60             for(int j=1;j<=3;j++) 61             { 62                 for(int k=1;k<=3;k++) 63                     { 64                         a[t].mp[j][k]=a[h].mp[j][k]; 65                     } 66             } 67             swap(a[t].mp[wx][wy],a[t].mp[x][y]); 68             step[t]=step[h]+1; 69             if(check()==1) 70             { 71                 printf("%d",step[t]); 72                 exit(0);// end 73             } 74             if(hash()==1) 75             t++; 76         } 77     } 78 } 79 void bfs() 80 { 81     while(h<t) 82     { 83         for(int i=1;i<=3;i++) 84         { 85             for(int j=1;j<=3;j++) 86             { 87                 if(a[h].mp[i][j]==0) 88                 { 89                     move(i,j); 90                 } 91             } 92         } 93         h++; 94     } 95 } 96 int main() 97 { 98     char dr[10]; 99     int bgx=0;100     int bgy=0;101     gets(dr);102     int now=0;103     for(int i=1;i<=3;i++)104     {105         for(int j=1;j<=3;j++)106         {107             a[0].mp[i][j]=dr[now]-48;108             if(a[0].mp[i][j]==0)109             {110                 bgx=i;111                 bgy=j;112             }113             now++;114         }115     }116     bfs();117     return 0;118 }

 

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.