sgu139Help Needed!判断15数码是否有解,以及判断N数码是否有解的推论

是这样的,要你判断一个15数码是否有解。

我不会,找了这样一个方法。

将16个数按出现顺序存放在一维数组里面,

然后累加每个数的逆序对数目,

还要加上0到终态的曼哈顿距离,得到一个数x。

由于最后的状态,整个图的逆序对数目是15,

是个奇数,于是,如果x也是奇数,

那么这个15数码就有解,

否则无解。

其它各种数码,都按照此法解就是了,

我的代码如下:

#include<iostream>
using namespace std;
int main()
{
	int map[16],ans=0;
	for(int i=0;i<16;i++)
	{
		scanf("%d",&map[i]);
		if(!map[i])
			ans+=6-i%4-i/4;
		for(int j=0;j<i;j++)
			if(map[j]>map[i])
				ans++;
	}
	if(ans&1)
		printf("YES");
	else
		printf("NO");
}

sgu139Help Needed!判断15数码是否有解,以及判断N数码是否有解的推论,布布扣,bubuko.com

时间: 2024-10-07 11:42:48

sgu139Help Needed!判断15数码是否有解,以及判断N数码是否有解的推论的相关文章

分支-02. 三角形判断(15)

#include<iostream>#include<iomanip>#include<math.h>using namespace std;int main(){    double a[2],b[2],c[2];    double l,m,n,p,s;    cin>>a[0]>>a[1]>>b[0]>>b[1]>>c[0]>>c[1];    l=sqrt(pow(a[0]-b[0],2)+

从子集和问题的动态规划解看判断问题与优化问题的区别与联系

一,子集和问题的动态解 1)子集和问题:给定一组整数构成的一个集合S,并给定另一个整数W,问:在S中是否存在一个子集A 包含于(属于) S,有A中所有元素的和等于W? (∑a(i)εAa(i) = W ?) 2) 很明显,子集和问题是NPC问题,证明参考<算法导论第二版中文版>第627页.既然它是NPC的,而我们这里用动态规划来求解该问题,显然是找到该问题的一个近似解. 3)根据1)中子集和问题的描述,该描述是判断问题,即判断集合A中所有的元素之和是不是等于W.当需要用动态规划来求解时,需要将

重拾单片机 第二天 数码管的使用 (动态扫描数码管)

我们要实现的功能是什么呢? 从 第一个数码管扫描 1 到第二个数码管 2 ,第三个数码管 3,.......一直到 第8个数码管 显示8 1 /*--------------www.szjcdz.cn-------------------- 2 名称:数码管动态扫描 3 编写:shenhui 4 日期:2015.10.28 5 内容:数码管动态扫描 6 ------------------------------------------------*/ 7 #include<reg52.h>

switch 判断单个值是否匹配,elseif 判断范围

1 <?php 2 3 $week=date("D"); 4 $week=1; 5 6 //switch (变量)//变量只用整行和字符串 7 //如果变量没有匹配的值则执行default中的区域,需要可以加上,不需要可以不加. 8 //break 是退出 9 //可以同时匹配多个条件,用来执行同一段代码. 10 //switch 判断单个值是否匹配,elseif 判断范围; 11 switch($week){ 12 13 case 1: 14 case 11: 15 case

Shell脚本(脚本中的逻辑判断,逻辑判断表达式,判断文件和目录属性,case判断)

逻辑判断表达式: -gt = 大于    -lt = 小于    -ge = 大于等于   -le = 小于等于   -eq = 恒等于  -ne = 不等于 这里要注意空格 也可以用&&和||结合多个条件 例如1: [[email protected] shell]# cat if4.sh #/bin/bash a=5 if [ $a -gt 4 ] && [ $a -lt 6 ] then echo "4<a<6" else echo n

Java的压缩、解压及压缩加密、解密解压 例子

为了节约带宽.加快传送速度,http协议支持gzip的压缩,但如果我们的app与后台不是通过http协议通讯的,那么压缩.解压这个流程需要自己写.下面给出compress和decompress的代码: public static byte[] compress(byte[] data) throws Exception { ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 压缩 GZIPOutputStream gos =

源码包的解压 .tar.gz /.tar.bz2的解压

解压方式如下: .tar.gz     格式解压为          tar   -zxvf   xx.tar.gz .tar.bz2   格式解压为          tar   -jxvf    xx.tar.bz2 源码包的解压 .tar.gz /.tar.bz2的解压,布布扣,bubuko.com

ViewPager 滑动一半的判断方法以及左滑右滑判断

做项目的时候,会碰到用viewpager + fragments去实现多页滑动.有些时候需要完成:界面在滑动到一半或是一半以上的时候,需要把title之类的切换到下一个页面.这个时候仅仅依赖Viewpager的接口是不能判断,这里提供一个方法:判断viewpager是左滑还是右滑,同时对滑过一半的时候(这个参数可以调),进行相关操作. //定义两个变量,这个两个变量是表示滑动时候,positionOffset 是从大到 //小的变化,还是从小到大的变化.用于在滑动时候,避免多次调用一个方法 pr

二叉树遍历的应用(路径和问题,判断是否是二叉搜索树,判断是否是二叉平衡树)

现在越发觉得关于树的问题真是千变万化,随便改一个条件又会是一个新的问题. 先序遍历求二叉树路径问题 问题:一棵二叉树每个节点包含一个整数,请设计一个算法输出所有满足条件的路径:此路径上所有节点之和等于给定值.注意此类路径不要求必须从根节点开始. 如果没有最后一个条件,这道题在leetcode上面见过,就是采取先序遍历的方式并记录下路径.但是加上最后一个条件后需要转下弯思考一下. 当然也需要记录下路径,并且记得要回溯.加上不要求从根节点开始这个条件后可以这么思考,每次遍历到当前节点时,从路径中查找