HDU 1667 The Rotation Game

参考文章:http://blog.csdn.net/urecvbnkuhbh_54245df/article/details/5856756

The portal:http://acm.hdu.edu.cn/showproblem.php?pid=1667


#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream> 

char route[105];

bool Accord(const int * Temp) {
	if(Temp[8] != Temp[7] || Temp[9] != Temp[7] || Temp[12] != Temp[7] || Temp[13] != Temp[7] 
		|| Temp[16] != Temp[7] || Temp[17] !=Temp[7] || Temp[18] != Temp[7]) {
		return false;
	}
	return true;
}

int Current_max_num(const int * Temp) {
	int Count_array[4];
	memset(Count_array,0,sizeof(Count_array));
	Count_array[Temp[ 7]] ++ ; Count_array[Temp[ 8]] ++ ; Count_array[Temp[ 9]] ++ ; 
	Count_array[Temp[12]] ++ ; Count_array[Temp[13]] ++ ; Count_array[Temp[16]] ++ ; 
	Count_array[Temp[17]] ++ ; Count_array[Temp[18]] ++ ;
	int ret = Count_array[1];
	if(Count_array[2] > ret)  ret = Count_array[2]; 
	if(Count_array[3] > ret)  ret = Count_array[3];
	return ret; 
}

void Change_state(int * Temp,const int * Map,int a1,int a2,int a3,int a4,int a5,int a6,int a7) {
	for(int i = 1 ; i <= 24 ; i++) {
		Temp[i] = Map[i];
	}	
	int temp_int = Temp[a1];
	Temp[a1] = Temp[a2];Temp[a2] = Temp[a3];Temp[a3] = Temp[a4];
	Temp[a4] = Temp[a5];Temp[a5] = Temp[a6];Temp[a6] = Temp[a7];
	Temp[a7] = temp_int;
}

bool DFS(const int * Map,const int depth,const int current_depth,int pre_direction,int & res) {
	if(depth - current_depth < 8 - Current_max_num(Map)) {
		return false;
	}
	if(depth < current_depth) {
		return false;
	}
	int Temp[30];
	for(int i = 1 ; i <= 8 ; i++) {
		if((i == 1 && pre_direction == 6 )||(i == 6 && pre_direction == 1))continue;
		if((i == 2 && pre_direction == 5 )||(i == 5 && pre_direction == 2))continue;
		if((i == 3 && pre_direction == 8 )||(i == 8 && pre_direction == 3))continue;
		if((i == 4 && pre_direction == 7 )||(i == 7 && pre_direction == 4))continue;
		switch( i ) {
			case 1: route[current_depth] = 'A'; Change_state(Temp,Map, 1, 3, 7,12,16,21,23);break; 
			case 2: route[current_depth] = 'B'; Change_state(Temp,Map, 2, 4, 9,13,18,22,24);break;
			case 3: route[current_depth] = 'C'; Change_state(Temp,Map,11,10, 9, 8, 7, 6, 5);break;
			case 4: route[current_depth] = 'D'; Change_state(Temp,Map,20,19,18,17,16,15,14);break;
			case 5: route[current_depth] = 'E'; Change_state(Temp,Map,24,22,18,13, 9, 4, 2);break;
			case 6: route[current_depth] = 'F'; Change_state(Temp,Map,23,21,16,12, 7, 3, 1);break;
			case 7: route[current_depth] = 'G'; Change_state(Temp,Map,14,15,16,17,18,19,20);break;
			case 8: route[current_depth] = 'H'; Change_state(Temp,Map, 5, 6, 7, 8, 9,10,11);break;
		}
		if(Accord(Temp)) {
			route[current_depth+1] = '\0';
			res = Temp[7];
			return true;
		}
		if(DFS(Temp,depth,current_depth+1,i,res)){
			return true;
		}
	}
	return false;
}

void Deal_with() {
	int Map[30];
	while(1) {
		scanf("%d",Map+1);
		if(Map[1] == 0) break;
		for(int i = 2 ; i <= 24 ; i++) {
			scanf("%d",Map+i);
		}
		if(Accord(Map)) {
			puts("No moves needed");
			printf("%d\n",Map[7]);
		}
		else {
			int depth = 1;
			int res;
			while(1) {
				if(DFS(Map,depth,0,-1,res)) {
					break;
				}
				depth ++;
			}
			printf("%s\n",route);
			printf("%d\n",res);
		}
	}
}

int main(void) {
	//freopen("a.in","r",stdin);
	Deal_with();
	return 0;
}

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值