洛谷 P1379 八数码难题
来源:互联网 发布:德勤monitor知乎 编辑:程序博客网 时间:2024/05/17 02:06
P1379 八数码难题
题目描述
在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。
输入输出格式
输入格式:
输入初试状态,一行九个数字,空格用0表示
输出格式:
只有一行,该行只有一个数字,表示从初始状态到目标状态需要的最少移动次数(测试数据中无特殊无法到达目标状态数据)
输入输出样例
输入样例#1:
283104765
输出样例#1:
4
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<map> 5 using namespace std; 6 map <string,int>v; 7 map <string,int>step; 8 int a,b,t,head=0,tail=0; 9 int bh[]={-3,-1,1,3},wz[100000],tou[100000];10 string s,rs("123804765"),dl[100000],ns;11 int main(){12 cin>>s;13 a=s.find('0');14 wz[head]=a;tou[head]=1;dl[head++]=s;15 wz[head]=4;tou[head]=2;dl[head++]=rs;16 v[s]=1;17 while(tail<=head){18 a=wz[tail];19 t=tou[tail];20 s=dl[tail++];21 b=step[s];22 for(int i=0;i<4;i++){23 ns=s;24 if(i==0&&a>2){25 ns[a]=s[a+bh[i]];ns[a+bh[i]]=s[a];26 }27 if(i==1&&a!=0&&a!=3&&a!=6){28 ns[a]=s[a+bh[i]];ns[a+bh[i]]=s[a];29 }30 if(i==2&&a!=2&&a!=5&&a!=8){31 ns[a]=s[a+bh[i]];ns[a+bh[i]]=s[a];32 }33 if(i==3&&a<6){34 ns[a]=s[a+bh[i]];ns[a+bh[i]]=s[a];35 }36 if(v[ns]!=t){37 if(!v[ns]){38 v[ns]=t;wz[head]=a+bh[i];tou[head]=t;39 dl[head++]=ns;step[ns]=b+1;40 }41 else{cout<<b+1+step[ns]<<endl;return 0;} 42 }43 }44 }45 return 0;46 }
鞠爷的,原来就没搞懂,这辈也不想搞懂了
0 0
- 洛谷P1379 八数码难题
- 洛谷 P1379 八数码难题
- 洛谷 P1379 八数码难题
- 洛谷 P1379 八数码难题
- 洛谷 P1379 八数码难题
- 洛谷 P1379 八数码难题
- P1379 八数码难题
- P1379 八数码难题
- IDA*-洛谷P1379 八数码难题
- C++ P1379 八数码难题
- 八数码难题 洛谷1379
- 八数码难题源代码
- 【宽搜】八数码难题
- wikioi1225 八数码难题
- wikioi1225 八数码难题
- ## 八数码难题 ##
- Codevs1225 八数码难题
- 八数码难题
- HDU 1875 畅通工程再续
- HDU 1871 无题
- HDU 1872 稳定排序
- 面向对象——基础(三大基本特征)
- HDU 1879 继续畅通工程
- 洛谷 P1379 八数码难题
- Apache Gateway Timeout
- HDU 2544 最短路
- 51Nod 1001 数组中和等于K的数对 And 1015 水仙花数
- linux命令英文缩写的含义(方便记忆)
- 51Nod 1003 1004 1009
- 成绩转换
- 51Nod 1080 两个数的平方和
- git冲突(git权威指南笔记)