青蛙交换(转)

http://britton.disted.camosun.bc.ca/frog_puzzle.htm

#include <iostream>

using namespace std;

int IfSuccess(int* p_result){
	int success = 1;

	for(int i = 0; i < 3; i ++){
		if(p_result[i] == 0
			|| p_result[i] < 4)
		{
			success = 0;
			break;
		}

	}
	for(int i = 4; success && i < 7; i ++){
		if(p_result[i] == 0
			|| p_result[i] >= 4)
		{
			success = 0;
			break;
		}

	}

	return success;
}

int Jump(int* p_step[], int blank, int step){
	int success = 0;
	int step_count = 0;

	success = IfSuccess(*(p_step + step));
	if(success){
		step_count = step + 1;
		return step_count;
	}

	if(blank -2 >= 0 && (*(p_step + step))[blank - 2] < 4){
		for(int i = 0; i < 7; i ++){
			(*(p_step + step + 1))[i] = (*(p_step + step))[i];
		}
		(*(p_step + step + 1))[blank] = (*(p_step + step))[blank - 2];
		(*(p_step + step + 1))[blank - 2] = 0;	  
		success = Jump(p_step, blank - 2, step + 1);
	}
	if(!success && blank -1 >= 0 && (*(p_step + step))[blank - 1] < 4){
		for(int i = 0; i < 7; i ++){
			(*(p_step + step + 1))[i] = (*(p_step + step))[i];
		}
		(*(p_step + step + 1))[blank] = (*(p_step + step))[blank - 1];
		(*(p_step + step + 1))[blank - 1] = 0;	  
		success = Jump(p_step, blank - 1, step + 1);
	}
	if(!success && blank + 2 < 7 && (*(p_step + step))[blank + 2] >= 4){
		for(int i = 0; i < 7; i ++){
			(*(p_step + step + 1))[i] = (*(p_step + step))[i];
		}
		(*(p_step + step + 1))[blank] = (*(p_step + step))[blank + 2];
		(*(p_step + step + 1))[blank + 2] = 0;	  
		success = Jump(p_step, blank + 2, step + 1);
	} 
	if(!success && blank + 1 < 7 && (*(p_step + step))[blank + 1] >= 4){
		for(int i = 0; i < 7; i ++){
			(*(p_step + step + 1))[i] = (*(p_step + step))[i];
		}
		(*(p_step + step + 1))[blank] = (*(p_step + step))[blank + 1];
		(*(p_step + step + 1))[blank + 1] = 0;	  
		success = Jump(p_step, blank + 1, step + 1);
	}
	return success;
}

int main(void){
	int quest[7] = {1, 2, 3, 0, 4, 5, 6};	

	int buffer[500][7];
	int* answer[500] = {0};

	for(int i = 0; i < 500; i ++){
		answer[i] = buffer[i];
	}
	for(int i = 0; i < 7; i ++){
		answer[0][i] = quest[i];
	}
	int success = Jump(answer, 3, 0); 

	if(success){
		for( int j = 0; j < success; j ++){
			for(int k = 0; k < 7; k++){
				cout<<answer[j][k];
				if( answer[j][k] < 4 && answer[j][k] != 0){
					cout<<">";
				}else if( answer[j][k] >=4 && answer[j][k] != 0){
					cout<<"<";
				}
				if(k < 6){
					cout<<",";
				}
			}
			cout<<endl;
		}
	}
	return 0;

}
时间: 2024-09-16 05:59:36

青蛙交换(转)的相关文章

JAVA-小青蛙跳石头游戏

游戏摘自微信传的手机网页版小游戏,我拿来做成了JAVA的界面版,但是没有去做素材,,直接拿方块代替小青蛙.游戏原址就不分享了,只能在手机上打开. 下面是源码: 1 /* 2 * Main.java 3 * */ 4 5 import java.awt.Color; 6 import java.awt.Graphics; 7 import java.awt.event.KeyAdapter; 8 import java.awt.event.KeyEvent; 9 import java.awt.e

青蛙三国志用户隐私条款(包括无内购版)

青蛙三国志尊重并保护所有使用服务用户的个人隐私权.为了给您提供更准确.更有个性化的服务,青蛙三国志会按照本隐私权政策的规定使用和披露您的个人信息.但青蛙三国志将以高度的勤勉.审慎义务对待这些信息.除本隐私权政策另有规定外,在未征得您事先许可的情况下,青蛙三国志不会将这些信息对外披露或向第三方提供.青蛙三国志会不时更新本隐私权政策.您在同意青蛙三国志服务使用协议之时,即视为您已经同意本隐私权政策全部内容.本隐私权政策属于青蛙三国志服务使用协议不可分割的一部分. 1.适用范围a)在您注册青蛙三国志帐

如何使用GNS3和Cisco IOU搭建路由交换实验-IOU篇

前面介绍了GNS3的概念,安装,配置和使用,本篇将介绍怎么利用GNS3配置IOU从而实现使用GNS3和Cisco IOU搭建路由交换实验. 由于本篇篇幅较长,所以先过一下大纲: 1. IOU模拟环境介绍 2. IOU软件环境的准备 3. VMware虚拟机的安装.导入和配置 4. IOU镜像的上传 5. GNS3的配置 6. IOU模拟环境的实现 IOU模拟环境介绍 IOU即IOS running in Unix,最初是由思科内部人员开发来测试IOS的平台,后来流传到互联网经网友改进有了后来的W

如何不运用第三方变量实现两个数的交换

当遇到交换两个变量的时候,我们通常使用的是借助第三方变量实现两个数的交换.那么如果不使用第三方变量时,该怎么操作呢. 下面有两种方法: 1.通过已有的两个变量之间的加或减实现: 这种方法对于两个都是无限接进int取值范围,而相加超出int取值范围的情况不适用. 2.通过异或实现(异或符号为^) ******************************************************************************************************

交换两个整型变量的数值

#include<stdio.h>void swap(int *p,int *q){ int t;t=*p; *p=*q; *q=t;}main(){ int a=5,b=4,*p,*q;p=&a; q=&b;swap(p,q);printf("a=%d b=%d",a,b);return 0;} 总结: 1,swap是用户定义的函数,它的作业是交换量(a和b)的值,它的形参p和q是指针变量. 2,程序运行时,先执行mian函数 ,输入a和b的值.然后将a和

linux操作逻辑分区与交换分区

作业一: 1)   开启Linux系统前添加一块大小为15G的SCSI硬盘 2)   开启系统,右击桌面,打开终端 3)   为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区,大小为5G 4)   格式化主分区为ext3系统 [[email protected] 桌面]# mkfs.ext3 /dev/sdc1 5)   将逻辑分区设置为交换分区 [[email protected] 桌面]# mkswap /dev/sdc5 6)   启用上一步的交换分

交换安全三宝(DHCP Snooping+IPSG+DAI)简单实验

1 实验拓扑图 2 DHCP Snooping 2.1 基本DHCP Snooping配置: C2960#show running-config Building configuration... ! ipdhcp snooping vlan 10 ipdhcp snooping ! interface FastEthernet0/1 description ---Connected to DHCP_Server --- switchportaccess vlan 10 switchport m

Ubuntu15、Ubuntu14交换Ctrl和Caps Lock键

在Ubuntu12.04中,交换Ctrl和Caps Lock键非常简单,直接图形就可以设置,但是到了Ubuntu14之后居然没有了,只能去使用命令来设置了. setxkbmap -option ctrl:swapcaps 在终端输入如上命令就可以实现了,但是这样重启后就没有效果了. 在/etc/rc.local最后增加上这句话,重启后没有生效: 在/etc/profile最后中增加上这句话,重启后没有生效: 在/etc/bash.bashrc最后中增加这句话,重启后生效.

[Linux]创建和启用Swap交换区

如果你的服务器的总是报告内存不足,并且时常因为内存不足而引发服务被强制kill的话,在不增加物理内存的情况下,启用swap交换区作为虚拟内存是一个不错的选择,我购买的DigitalOcean VPS 512M内存基本不够用的,好在VPS的母鸡使用的SSD,正常读写速度都在300MB/s以上,启用swap后性能提高了不少,特别是在处理消耗大内存的脚本方面 创建交换区原则:1.创建的swap交换区大小应该大于实际物理内存的容量大小,但是不要过大,以免造成硬盘空间浪费.2.如果内存IO请求频繁,而单一