HDU 2918 Tobo or not Tobo DFS
来源:互联网 发布:知已交友网个人中心 编辑:程序博客网 时间:2024/05/19 09:10
题意:给出10个数,第一个数表示旋转最大次数Y(小于10),后面的为1~9之间的数依次代表3*3矩阵的从上到下,左到右的数。旋转方法:一个2*2的矩阵逆时针或顺时针旋 转90度。问有没有不大于 旋转最大次数 的方法旋转,使得矩阵变为 row1: 123 row2:456, row3:789, 若有再输出最小值,若无则输出-1。
思路:因为是3*3矩阵,能旋转的不同方法就8钟, 可以用dfs回溯,方法是参照别人的:从最大步数为1开始dfs, 直到大于Y或者第一次找到成功的方法就是最小值。
后来自己改了一下,发现超时了。
#include <stdio.h>char num[12], Y, ans;int check(){ for(int i = 1;i <= 9;i++) if((num[i] - '0') != i) return 0; return 1; }void swap(int a, int b, int c, int d){ int t = num[a]; num[a] = num[b]; num[b] = num[c]; num[c] = num[d]; num[d] = t;}void solve(int c){ if(c == 1)swap(1, 2, 5, 4); if(c == 2)swap(2, 3, 6, 5); if(c == 3)swap(4, 5, 8, 7); if(c == 4)swap(5, 6, 9, 8); if(c == 5)swap(8, 9, 6, 5); if(c == 6)swap(7, 8, 5, 4); if(c == 7)swap(5, 6, 3, 2); if(c == 8)swap(4, 5, 2, 1);}int dfs(int step){ if(check()) return 1; if(step >= ans) return 0; for(int i = 1;i <= 8;i++) { solve(i); if(dfs(step + 1)) return 1; solve(9 - i); } return 0;}int main(){ int k = 1; while(scanf("%s", num)) { if(num[1] == '0') break; Y = num[0] - '0'; ans = 0; while(ans <= Y) { if(dfs(0)) break; ans++; } printf("%d. ", k++); if(ans <= Y) printf("%d\n", ans); else printf("-1\n"); }}
0 0
- HDU 2918 Tobo or not Tobo DFS
- HDU 2918 Tobo or not Tobo
- HDU 2918 Tobo or not Tobo IDA*搜索
- 【搜索进阶】HDU 2918 Tobo or not Tobo
- hdu 2918 Tobo or not Tobo(IDA*算法)
- hdu 2918 Tobo or not Tobo(BFS+状态标记)
- HDU Tobo or not Tobo IDA*
- UVALive 4361 Tobo or not Tobo
- HDU2918:Tobo or not Tobo(IDA)
- hdu 3342 Legal or Not(拓扑排序dfs)
- Legal or Not HDU
- hdu Legal or Not
- Legal or Not HDU
- hdu 1074 dfs or bfs
- hdu 1241 bfs or dfs
- HDU 3342 Legal or Not
- hdu 3517 Adopt or not
- hdu 3342 Legal or Not
- [MFC]DlgDemo1程序:基本的模态对话框
- The differences between String, StringBuffer and StringBuilder
- 在需求分析中就可以避免的那些错误11
- 三目运算符的用法
- android 超高仿微信图片选择器
- HDU 2918 Tobo or not Tobo DFS
- C风格字符串和C++string对象的相互转化
- 将mysql数据导入redis
- autoconfig和automake的使用
- Spark入门实战系列--8.Spark MLlib(上)--机器学习及SparkMLlib简介
- Apt本地源配置
- knn距离公式比较
- Android多线程编程(异步通信)--->Handler和AsyncTask
- 嵌入式程序员面试题