国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ZOJ - 2477 dfs [kuangbin帶你飛]專題二

2019-11-08 18:34:53
字體:
來源:轉載
供稿:網友

       注意輸入的處理,旋轉操作打表。遞增枚舉可能步數,作為限制方便找到最短路。

AC代碼:90ms

#include<cstdio>#include<cstring>char magic[60];int cube[6][9] = {	{4,0,1,2,3,5,6,7,8},{22,9,10,11,21,23,33,34,35},{25,12,13,14,24,26,36,37,38},    {28,15,16,17,27,29,39,40,41},{31,18,19,20,30,32,42,43,44},{49,45,46,47,48,50,51,52,53}}; const int rot[12][20]={         {11,23,35,34,33,21, 9,10,51,48,45,36,24,12, 6, 3, 0,20,32,44}, //只有20個需要改變,每個中心無需改變          { 9,10,11,23,35,34,33,21,36,24,12, 6, 3, 0,20,32,44,51,48,45},         {14,13,26,38,37,36,24,12,45,46,47,39,27,15, 8, 7, 6,11,23,35},         {12,24,13,14,26,38,37,36,39,27,15, 8, 7, 6,11,23,35,45,46,47},         {17,29,41,40,39,27,15,16,47,50,53,42,30,18, 2, 5, 8,14,26,38},         {15,16,17,29,41,40,39,27,42,30,18, 2, 5, 8,14,26,38,47,50,53},         {18,19,20,32,44,43,42,30,53,52,51,33,21, 9, 0, 1, 2,17,29,41},         {42,30,18,19,20,32,44,43,33,21, 9, 0, 1, 2,17,29,41,53,52,51},         { 0, 1, 2, 5, 8, 7, 6, 3,12,13,14,15,16,17,18,19,20, 9,10,11},         { 6, 3, 0, 1, 2, 5, 8, 7,15,16,17,18,19,20, 9,10,11,12,13,14},         {45,46,47,50,53,52,51,48,44,43,42,41,40,39,38,37,36,35,34,33},         {51,48,45,46,47,50,53,52,41,40,39,38,37,36,35,34,33,44,43,42}};bool is_ok() {	for(int i = 0; i < 6; ++i) {		for(int j = 0; j < 8; ++j) {			if(magic[cube[i][j]] != magic[cube[i][j+1]]) return false;		}	}	return true;	}void rotate(int k) { //旋轉第k面 	int h = k ^ 1; //對應轉動方式,順時針or逆時針 	char tmp[60];	memcpy(tmp, magic, sizeof(magic));	for(int i = 0; i < 20; ++i) {		magic[rot[k][i]] = tmp[rot[h][i]];	}}int ans[2][10];int limit;int dfs(int cnt) {	if(cnt >= limit) return is_ok();	char old[60];	memcpy(old, magic, sizeof(magic));	for(int i = 0; i < 12; ++i) {		rotate(i);		ans[0][cnt] = i / 2;		ans[1][cnt] = (i & 1) ? -1 : 1;		if(dfs(cnt + 1)) return 1;		memcpy(magic, old, sizeof(old));	}} int main() {	int T;	scanf("%d", &T);	char str[60];	int kase = 0;	while(T-- ) {		if(kase++) getchar();		for(int i = 0; i < 54; ++i) {			while(1) {				char ch = getchar();				if(ch >= 'a' && ch <= 'z') {					magic[i] = ch;					break;				}			}		}		for(limit = 0; limit <= 6; ++limit) {			if(limit == 6) PRintf("-1/n");			else if(dfs(0)) {				printf("%d/n", limit);				for(int i = 0; i < limit; ++i) {					printf("%d %d/n", ans[0][i], ans[1][i]);				}				break;			}		}	}	return 0;}如有不當之處歡迎指出!


上一篇:KMP

下一篇:排序算法總結一

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 万年县| 红桥区| 平南县| 林芝县| 土默特右旗| 绥宁县| 阳朔县| 青神县| 新安县| 宿州市| 涞源县| 正宁县| 巫溪县| 昂仁县| 巴彦淖尔市| 堆龙德庆县| 莱芜市| 阿克陶县| 昌乐县| 岗巴县| 临沧市| 瑞丽市| 凭祥市| 松原市| 徐水县| 岚皋县| 阳新县| 固阳县| 沿河| 南岸区| 大丰市| 如皋市| 山丹县| 漾濞| 崇仁县| 汝阳县| 康马县| 濮阳县| 子洲县| 华安县| 怀化市|