1571.八数码

2023-12-13 04:58
文章标签 数码 1571

本文主要是介绍1571.八数码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



#include<iostream>
#include<queue>
#include<map>using namespace std;int num;
int istate;
int bs[3][3]; 
int sa[3][3];  //将sa也定义为全局变量的目的是简化程序,canmoveto 和moveto 函数都需要将u转化为二维数组,可以直接沿用
int brow,bcol;
int dr[4]={0,1,0,-1};
int dc[4]={-1,0,1,0};queue<int>q;
map<int,int>step;  //用来记录步数
map<int,int>isnew;  //用来标志已经出现的数void readdata();
void init();
int bfs();
int canmoveto(int u,int dire);
int moveto(int u,int dire);int main()
{readdata();init();num=bfs();cout<<num<<endl;
}int bfs()
{int u,v,i;while(!q.empty()){u=q.front();q.pop();for(i=0;i<4;i++)  // 0 1 2 3表示左下右上四个方向{if(canmoveto(u,i)) //如果可以挪动,即数组不越界{v=moveto(u,i);if(v==123456780){return(step[u]+1);}if(isnew[v]!=1){q.push(v); //将v加入到队列中isnew[v]=1;// 标志v已出现过step[v]=step[u]+1;//记录到达v的最小步骤 }}}}return (-1);  //如果不能挪动,则返回-1
}void readdata()
{int i,j,temp=0;for(i=0;i<3;i++){for(j=0;j<3;j++){cin>>bs[i][j];temp=temp*10+bs[i][j];  //将数组转化为一个数}}istate=temp;
}void init()
{q.push(istate);// 将初始值加入到队列中 isnew[istate]=1;//标志初始值已出现过step[istate]=0;//初始值的最小步数为0; 
}int canmoveto(int u,int dire)
{int i,j;for(i=2;i>=0;i--)  //将u转化为二维数组{for(j=2;j>=0;j--){sa[i][j]=u%10;u=u/10;if(sa[i][j]==0){brow=i;bcol=j;}}}if(dire==0&&bcol==0)  //判断四种情况下数组是否越界;越界则返回0{return(0);}if(dire==1&&brow==2){return(0);}if(dire==2&&bcol==2){return(0);} if(dire==3&&brow==0){return(0);}return(1);  //不越界则返回1
}int moveto(int u,int dire)
{int r,c;int i,j;int temp=0;r=brow+dr[dire];  //r c表示即将要挪动的位置的行列c=bcol+dc[dire];sa[brow][bcol]=sa[r][c];  //交换数值sa[r][c]=0;for(i=0;i<3;i++)  //将二维数组重新转化为整数{for(j=0;j<3;j++){temp=temp*10+sa[i][j];}}return(temp);
}

1571.八数码

时限:5000ms 内存限制:20000K  总时限:10000ms
描述
在九宫格里放在1到8共8个数字还有一个是空格,与空格相邻的数字可以移动到空格的位置,问给定的状态最少需要几步能到达目标状态(用0表示空格):
1 2 3
4 5 6
7 8 0
输入
输入一个给定的状态。
输出
输出到达目标状态的最小步数。不能到达时输出-1。
输入样例
1 2 3
4 0 6
7 5 8
输出样例
2

这篇关于1571.八数码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/487203

相关文章

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

八数码问题——HDU 1043

对应杭电题目: 点击打开链接 The 15-puzzle has been around for over 100 years; even if you don't know it by that name, you've seen it. It is constructed with 15 sliding tiles, each with a number from 1 to

中秋佳节,好物相伴 —— 精选五款数码好物推荐

中秋佳节,不仅是家人团聚的时刻,也是享受科技与生活的完美结合的好时机。在这个充满温情的节日里,我们为您精心挑选了五款数码好物,其中包括备受好评的南卡Runner Pro5骨传导耳机,以及其他四款各具特色的数码产品,希望能为您的中秋佳节增添更多乐趣与便捷。 推荐1、 南卡Runner Pro5骨传导耳机 —— 运动与音乐的完美融合 在追求健康生活的今天,南卡Runner Pro5无疑是你运动时的

中地数码集团、新中地教育校企联合GIS开发实践实训项目

中地数码集团是国内GIS软件开发与解决方案提供商头部企业,30年来深耕GIS行业,产业链遍布智慧地质、城市建设规划、国土资源管理等重点行业。新中地教育为首批长江学者、国家地理信息系统工程技术研究中心首席科学家、中地数码创始人吴信才教授、刘永教授创办的,隶属于中地数码集团,行业唯一专业从事GIS及软件开发人才培养的工作的大型职业教育企业。 新中地教育自2018年成立以来,通过校企合作、

2024开学好物推荐!精选五款开学必备的数码好物!学生党必看!

一眨眼,就到了暑假的尾声,开学季悄然临近,很多学生和家长都在忙着筹备着开学的行囊,其中学习用品与数码装备自然是不可或缺。面对琳琅满目的开学好物,选择困难症是否已悄然来袭?别担心,作为一名数码爱好者,我特意整理了几款既实用又潮流的数码设备,助你一臂之力,轻松备战新学期。还在犹豫的小伙伴们,快来一探究竟吧! 第一款、西圣电容笔 喜欢无纸化学习、或者是喜欢在iPad上写写画画、玩游戏的朋友们

五款值得入手的数码好物倾情推荐,学生一族闭眼可入!

随着炎热的夏日渐渐离去,转眼又到了开学季,学生们又背着大大小小的书包重聚在熟悉的校园,一个暑假的放松让他们养精蓄锐、精神抖擞,准备迎接新学期的各种挑战,作为新时代的学子肯定离不开提升效率的数码好物,在这里就给广大学子推荐五款性价比实用数码好物,相信在它们的加持下新学期无论学业还是生活都能事半功倍,披荆斩棘一往无前。 推荐1、健康不入耳不伤耳——南卡Runner Pro5 推荐理由:公认骨传导耳

618数码好物清单,这些好物你不容错过

每次的618大促中,有各类数码产品纷纷亮相,让人眼花缭乱,而且打折的力度都很高,那么在这个充满诱惑的购物季里,哪些电子数码好物值得你入手呢?今天,我就一起给题主盘点那些实用至上、绝对不吃灰的年度电子数码好物。 1、不用入耳佩戴的开放式耳机 官方售价:129¥ 推荐理由: 开放式耳机市场有一款十分火爆的耳机:西圣Air。它舒适的佩戴感、自然通风的效果、优秀的运动体验、小耳用户的友好使用感,完

618购物节入手哪些数码好物好?年度必备好物清单大盘点

随着一年一度的618购物节的到来,数码市场再次掀起了热潮,在这个属于消费者的狂欢节里,各大品牌和商家纷纷推出优惠活动和新品,为数码爱好者们带来了无数的购物选择,那么在这个购物盛宴中,我们应该如何挑选那些真正值得入手的数码好物呢?接下来,就让我们一起盘点那些年度必备、不容错过的数码好物清单,帮助你在618购物节中找到心仪的宝贝。 第一款:西圣AVA2蓝牙耳机 售价:129¥ 一句点评:百元价格

618数码好物怎么买最划算,2024必入的数码好物清单分享!

在这个充满诱惑的618购物季,我们不仅要追求价格的优惠,更要确保购买的数码好物能够真正满足我们的需求,带来实际的价值,因此,为了帮助大家更好地把握618购物节的机会,我精心准备了一份2024年必入的数码好物清单,并为大家提供了一些购买建议,以确保你能以最划算的价格,买到最适合自己的数码产品。 第一款:百元蓝牙耳机性价比首选—西圣AVA2 售价:129¥ 一句点评:百元价格拥有千元机音质与配置

Hdu 1571 下沙小面的(1) [模拟]

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1571 题目的意思很是简单,就是模拟一个面的的情况。直接链表模拟就可以了。。。 表示最近写了一些模拟,才发现自己的代码能力的羸弱。。。。 写了一些个链表的模拟,一直各种Bug,RE,WA。。反正是各种错误的有。。。 反正,还是多写吧。。自己的代码能力还是很弱。。。。 这只能用多写才能够解决的问