P1379 八数码难题
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
#include<vector>
using std::vector;
bool t[];
int a[][];
int ans=;
int tx[]={,,,-,};
int ty[]={,-,,,};
int pc[];
int zt=;
int erfen(int a)
{
int ans=-;
int l=,r=zt,mid=(l+r)/;
while(l<=r)
{
if(pc[mid]>a)
{
r=mid-;
mid=(l+r)/;
}
if(pc[mid]<a)
{
l=mid+;
mid=(l+r)/;
}
if(pc[mid]==a)
{
ans=mid;
return ans;
}
}
return ans;
}
void bfs(int x,int y,int a[][],int sum)
{ if(erfen(a[][]*+a[][]*+a[][]*
+a[][]*+a[][]*+a[][]*+a[][]*+a[][]*
+a[][])!=-) return ;//如果重复了,直接退出(删除节点)
if(a[][]*+a[][]*+a[][]*
+a[][]*+a[][]*+a[][]*+a[][]*+a[][]*
+a[][]==)
{
if(sum<ans) ans=sum;
cout<<"youyigejie"<<endl;
return ;
} //判断是否目标状态
sum++;
pc[++zt]=a[][]*+a[][]*+a[][]*
+a[][]*+a[][]*+a[][]*+a[][]*+a[][]*
+a[][];
sort(pc,pc++zt);
for(int i=;i<=;i++)
if(tx[i]+x>=&&tx[i]+x<=&&ty[i]+y>=&&ty[i]+y<=)
{
int t[][];
for(int i=;i<=;i++)
for(int j=;j<=;j++)
t[i][j]=a[i][j];
t[x][y]=t[tx[i]+x][ty[i]+y],t[tx[i]+x][ty[i]+y]=;
if(erfen(t[][]*+t[][]*+t[][]*
+t[][]*+t[][]*+t[][]*+t[][]*+t[][]*
+t[][])==-)bfs(x+tx[i],y+ty[i],t,sum); }
}
int main()
{ int x,y;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
cin>>a[i][j];
if(a[i][j]==) x=i,y=j;
}
bfs(x,y,a,);
cout<<ans<<endl;
return ;
}
P1379 八数码难题的更多相关文章
- 洛谷 P1379 八数码难题 解题报告
P1379 八数码难题 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初 ...
- 洛谷——P1379 八数码难题
P1379 八数码难题 双向BFS 原来双向BFS是这样的:终止状态与起始状态同时入队,进行搜索,只不过状态标记不一样而已,本题状态使用map来存储 #include<iostream> ...
- [luogu]P1379 八数码难题[广度优先搜索]
八数码难题 ——!x^n+y^n=z^n 我在此只说明此题的一种用BFS的方法,因为本人也是初学,勉勉强强写了一个单向的BFS,据说最快的是IDA*(然而蒟蒻我不会…) 各位如果想用IDA*的可以看看 ...
- 洛谷P1379八数码难题
题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中. 要求解的问题是:给出一种初始布局(初始状态)和目标布局(为 ...
- 洛谷 P1379 八数码难题 Label:判重&&bfs
特别声明:紫书上抄来的代码,详见P198 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给 ...
- 【洛谷】P1379 八数码难题(bfs)
题目 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局 ...
- 洛谷 P1379 八数码难题
题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了 ...
- 洛谷 - P1379 - 八数码难题 - bfs
https://www.luogu.org/problemnew/show/P1379 #include <bits/stdc++.h> using namespace std; #def ...
- 洛谷—— P1379 八数码难题
https://daniu.luogu.org/problem/show?pid=1379 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示 ...
- luogu P1379 八数码难题
题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了 ...
随机推荐
- Qt消息机制和事件、事件过滤
一,事件 事件(event)是由系统或者 Qt 本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应时发出,如键盘事件等 ...
- IIS7 使用server farms 进行负载均衡
1.首先,到微软官网下载web平台安装程序: https://www.microsoft.com/web/downloads/ 2.安装好后,会在IIS里有这个图标: 3.双击这个图标:安装 4.安装 ...
- 从golang-gin-realworld-example-app项目学写httpapi (五)
https://github.com/gothinkster/golang-gin-realworld-example-app/blob/master/users/middlewares.go 中间件 ...
- QT5连接Mysql
摘要 在Qt 5中已经提供了对MySQL数据库的默认支持,要想使用该数据库,需要先进行数据库的安装, 这里我们介绍下在Windows系统中MySQL数据库的安装和简单使用. Qt如何利用Mysql ...
- C# 冒泡排序法、插入排序法、选择排序法
冒泡排序法 是数组等线性排列的数字从大到小或从小到大排序. 以从小到大排序为例. 数据 11, 35, 39, 30, 7, 36, 22, 13, 1, 38, 26, 18, 12, 5, 45, ...
- 为什么JS中0.1+0.2 != 0.3
为什么JS中0.1+0.2 != 0.3 在我曾经的一篇< javascript入门教程 (2) >中,讲到JS中数字运算时,我们提到过一个叫做 数字运算中的精度缺失的问题,当时我们只是简 ...
- git修改远程仓库
三种方式都可以. 1. 修改命令 git remte origin set-url URL 2.先删后加 git remote rm origin git remote add origin git@ ...
- angular2 Router类中的路由跳转navigate
navigate是Router类的一个方法,主要用来路由跳转. 函数定义 navigate(commands: any[], extras?: NavigationExtras) : Promise` ...
- 匹配IP的正则表达式
正则表达式匹配IP 1 ((25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[1-9])
- C语言支持的四种变量存储类型
http://blog.csdn.net/zhandoushi1982/article/details/5425835 一)auto:auto称为自动变量(局部变量).局部变量是指在函数内部说明的变量 ...