USACO 1.4.2 The Clocks(DFS)
来源:互联网 发布:精灵王座网络公映 编辑:程序博客网 时间:2024/05/16 08:20
题目分析:
注意 1.一个变换 用4次 ,相当于没有变换,用一个number[i]数组记录每个变换次数
2.确定的变换 序列,与其变换顺序,没有关系(没注意这所以一直写不对)
/*ID:wconveyPROG:clocksLANG:C++*/#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int maze[5][5];int path[1000],pa[1000],number[10];int ans;bool success(){int sum=0;for(int i=0;i<3;i++)for(int j=0;j<3;j++)sum+=maze[i][j];if(sum==12*9)return true;elsereturn false;}void copy(int k){for(int i=1;i<=k;i++)pa[i]=path[i];}void move(int k){if(k==1){if(maze[0][0]!=12)maze[0][0]+=3;elsemaze[0][0]=3;if(maze[0][1]!=12)maze[0][1]+=3;elsemaze[0][1]=3;if(maze[1][0]!=12)maze[1][0]+=3;elsemaze[1][0]=3;if(maze[1][1]!=12)maze[1][1]+=3;elsemaze[1][1]=3;}else if(k==2){if(maze[0][0]!=12)maze[0][0]+=3;elsemaze[0][0]=3;if(maze[0][1]!=12)maze[0][1]+=3;elsemaze[0][1]=3;if(maze[0][2]!=12)maze[0][2]+=3;elsemaze[0][2]=3;}else if(k==3){if(maze[0][1]!=12)maze[0][1]+=3;elsemaze[0][1]=3;if(maze[0][2]!=12)maze[0][2]+=3;elsemaze[0][2]=3;if(maze[1][1]!=12)maze[1][1]+=3;elsemaze[1][1]=3;if(maze[1][2]!=12)maze[1][2]+=3;elsemaze[1][2]=3;}else if(k==4){if(maze[0][0]!=12)maze[0][0]+=3;elsemaze[0][0]=3;if(maze[1][0]!=12)maze[1][0]+=3;elsemaze[1][0]=3;if(maze[2][0]!=12)maze[2][0]+=3;elsemaze[2][0]=3;}else if(k==5){if(maze[0][1]!=12)maze[0][1]+=3;elsemaze[0][1]=3;if(maze[1][0]!=12)maze[1][0]+=3;elsemaze[1][0]=3;if(maze[1][1]!=12)maze[1][1]+=3;elsemaze[1][1]=3;if(maze[1][2]!=12)maze[1][2]+=3;elsemaze[1][2]=3;if(maze[2][1]!=12)maze[2][1]+=3;elsemaze[2][1]=3;}else if(k==6){if(maze[0][2]!=12)maze[0][2]+=3;elsemaze[0][2]=3;if(maze[1][2]!=12)maze[1][2]+=3;elsemaze[1][2]=3;if(maze[2][2]!=12)maze[2][2]+=3;elsemaze[2][2]=3;}else if(k==7){if(maze[1][0]!=12)maze[1][0]+=3;elsemaze[1][0]=3;if(maze[1][1]!=12)maze[1][1]+=3;elsemaze[1][1]=3;if(maze[2][0]!=12)maze[2][0]+=3;elsemaze[2][0]=3;if(maze[2][1]!=12)maze[2][1]+=3;elsemaze[2][1]=3;}else if(k==8){if(maze[2][0]!=12)maze[2][0]+=3;elsemaze[2][0]=3;if(maze[2][1]!=12)maze[2][1]+=3;elsemaze[2][1]=3;if(maze[2][2]!=12)maze[2][2]+=3;elsemaze[2][2]=3;}else{if(maze[1][1]!=12)maze[1][1]+=3;elsemaze[1][1]=3;if(maze[1][2]!=12)maze[1][2]+=3;elsemaze[1][2]=3;if(maze[2][1]!=12)maze[2][1]+=3;elsemaze[2][1]=3;if(maze[2][2]!=12)maze[2][2]+=3;elsemaze[2][2]=3;}}void back(int k){if(k==1){if(maze[0][0]!=3)maze[0][0]-=3;elsemaze[0][0]=12;if(maze[0][1]!=3)maze[0][1]-=3;elsemaze[0][1]=12;if(maze[1][0]!=3)maze[1][0]-=3;elsemaze[1][0]=12;if(maze[1][1]!=3)maze[1][1]-=3;elsemaze[1][1]=12;}else if(k==2){if(maze[0][0]!=3)maze[0][0]-=3;elsemaze[0][0]=12;if(maze[0][1]!=3)maze[0][1]-=3;elsemaze[0][1]=12;if(maze[0][2]!=3)maze[0][2]-=3;elsemaze[0][2]=12;}else if(k==3){if(maze[0][1]!=3)maze[0][1]-=3;elsemaze[0][1]=12;if(maze[0][2]!=3)maze[0][2]-=3;elsemaze[0][2]=12;if(maze[1][1]!=3)maze[1][1]-=3;elsemaze[1][1]=12;if(maze[1][2]!=3)maze[1][2]-=3;elsemaze[1][2]=12;}else if(k==4){if(maze[0][0]!=3)maze[0][0]-=3;elsemaze[0][0]=12;if(maze[1][0]!=3)maze[1][0]-=3;elsemaze[1][0]=12;if(maze[2][0]!=3)maze[2][0]-=3;elsemaze[2][0]=12;}else if(k==5){if(maze[0][1]!=3)maze[0][1]-=3;elsemaze[0][1]=12;if(maze[1][0]!=3)maze[1][0]-=3;elsemaze[1][0]=12;if(maze[1][1]!=3)maze[1][1]-=3;elsemaze[1][1]=12;if(maze[1][2]!=3)maze[1][2]-=3;elsemaze[1][2]=12;if(maze[2][1]!=3)maze[2][1]-=3;elsemaze[2][1]=12;}else if(k==6){if(maze[0][2]!=3)maze[0][2]-=3;elsemaze[0][2]=12;if(maze[1][2]!=3)maze[1][2]-=3;elsemaze[1][2]=12;if(maze[2][2]!=3)maze[2][2]-=3;elsemaze[2][2]=12;}else if(k==7){if(maze[1][0]!=3)maze[1][0]-=3;elsemaze[1][0]=12;if(maze[1][1]!=3)maze[1][1]-=3;elsemaze[1][1]=12;if(maze[2][0]!=3)maze[2][0]-=3;elsemaze[2][0]=12;if(maze[2][1]!=3)maze[2][1]-=3;elsemaze[2][1]=12;}else if(k==8){if(maze[2][0]!=3)maze[2][0]-=3;elsemaze[2][0]=12;if(maze[2][1]!=3)maze[2][1]-=3;elsemaze[2][1]=12;if(maze[2][2]!=3)maze[2][2]-=3;elsemaze[2][2]=12;}else{if(maze[1][1]!=3)maze[1][1]-=3;elsemaze[1][1]=12;if(maze[1][2]!=3)maze[1][2]-=3;elsemaze[1][2]=12;if(maze[2][1]!=3)maze[2][1]-=3;elsemaze[2][1]=12;if(maze[2][2]!=3)maze[2][2]-=3;elsemaze[2][2]=12;}}void dfs(int k){if(success()){if(k-1<ans){ans=k-1;copy(ans);}return ;}if(k-1<ans){if(k==1){for(int i=1;i<=9;i++){move(i);path[k]=i;number[i]++;dfs(k+1);back(i);number[i]--;}}else{for(int i=path[k-1];i<=9;i++){if(number[i]==3)continue;move(i);path[k]=i;number[i]++;dfs(k+1);back(i);number[i]--;}}}/*for(int i=1;i<=9;i++){if(k>=4){if(path[k-3]==path[k-2] && path[k-2]==path[k-1]){if(i>path[k-1]){move(i);path[k]=i;dfs(k+1);back(i);}}else{if(i>=path[k-1]){move(i);path[k]=i;dfs(k+1);back(i);}}}else{if(i>path[i-1]){move(i);path[k]=i;dfs(k+1);back(i);}}}*/}int main(){freopen("clocks.in","r",stdin);freopen("clocks.out","w",stdout);for(int i=0;i<3;i++)for(int j=0;j<3;j++)scanf("%d",&maze[i][j]);ans=1000;memset(number,0,sizeof(number));dfs(1);for(int i=1;i<ans;i++)printf("%d ",pa[i]);printf("%d\n",pa[ans]);//system("pause");return 0;}/*#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int maze[5][5];int path[100],pa[100];int ans,n;bool success(){int sum=0;for(int i=0;i<3;i++)for(int j=0;j<3;j++)sum+=maze[i][j];if(sum==12*9)return true;elsereturn false;}void copy(int k){for(int i=1;i<=k;i++)pa[i]=path[i];}void move(int k){if(k==1){if(maze[0][0]!=12)maze[0][0]+=3;elsemaze[0][0]=3;if(maze[0][1]!=12)maze[0][1]+=3;elsemaze[0][1]=3;if(maze[1][0]!=12)maze[1][0]+=3;elsemaze[1][0]=3;if(maze[1][1]!=12)maze[1][1]+=3;elsemaze[1][1]=3;}else if(k==2){if(maze[0][0]!=12)maze[0][0]+=3;elsemaze[0][0]=3;if(maze[0][1]!=12)maze[0][1]+=3;elsemaze[0][1]=3;if(maze[0][2]!=12)maze[0][2]+=3;elsemaze[0][2]=3;}else if(k==3){if(maze[0][1]!=12)maze[0][1]+=3;elsemaze[0][1]=3;if(maze[0][2]!=12)maze[0][2]+=3;elsemaze[0][2]=3;if(maze[1][1]!=12)maze[1][1]+=3;elsemaze[1][1]=3;if(maze[1][2]!=12)maze[1][2]+=3;elsemaze[1][2]=3;}else if(k==4){if(maze[0][0]!=12)maze[0][0]+=3;elsemaze[0][0]=3;if(maze[1][0]!=12)maze[1][0]+=3;elsemaze[1][0]=3;if(maze[2][0]!=12)maze[2][0]+=3;elsemaze[2][0]=3;}else if(k==5){if(maze[0][1]!=12)maze[0][1]+=3;elsemaze[0][1]=3;if(maze[1][0]!=12)maze[1][0]+=3;elsemaze[1][0]=3;if(maze[1][1]!=12)maze[1][1]+=3;elsemaze[1][1]=3;if(maze[1][2]!=12)maze[1][2]+=3;elsemaze[1][2]=3;if(maze[2][1]!=12)maze[2][1]+=3;elsemaze[2][1]=3;}else if(k==6){if(maze[0][2]!=12)maze[0][2]+=3;elsemaze[0][2]=3;if(maze[1][2]!=12)maze[1][2]+=3;elsemaze[1][2]=3;if(maze[2][2]!=12)maze[2][2]+=3;elsemaze[2][2]=3;}else if(k==7){if(maze[1][0]!=12)maze[1][0]+=3;elsemaze[1][0]=3;if(maze[1][1]!=12)maze[1][1]+=3;elsemaze[1][1]=3;if(maze[2][0]!=12)maze[2][0]+=3;elsemaze[2][0]=3;if(maze[2][1]!=12)maze[2][1]+=3;elsemaze[2][1]=3;}else if(k==8){if(maze[2][0]!=12)maze[2][0]+=3;elsemaze[2][0]=3;if(maze[2][1]!=12)maze[2][1]+=3;elsemaze[2][1]=3;if(maze[2][2]!=12)maze[2][2]+=3;elsemaze[2][2]=3;}else{if(maze[1][1]!=12)maze[1][1]+=3;elsemaze[1][1]=3;if(maze[1][2]!=12)maze[1][2]+=3;elsemaze[1][2]=3;if(maze[2][1]!=12)maze[2][1]+=3;elsemaze[2][1]=3;if(maze[2][2]!=12)maze[2][2]+=3;elsemaze[2][2]=3;}}void back(int k){if(k==1){if(maze[0][0]!=3)maze[0][0]-=3;elsemaze[0][0]=12;if(maze[0][1]!=3)maze[0][1]-=3;elsemaze[0][1]=12;if(maze[1][0]!=3)maze[1][0]-=3;elsemaze[1][0]=12;if(maze[1][1]!=3)maze[1][1]-=3;elsemaze[1][1]=12;}else if(k==2){if(maze[0][0]!=3)maze[0][0]-=3;elsemaze[0][0]=12;if(maze[0][1]!=3)maze[0][1]-=3;elsemaze[0][1]=12;if(maze[0][2]!=3)maze[0][2]-=3;elsemaze[0][2]=12;}else if(k==3){if(maze[0][1]!=3)maze[0][1]-=3;elsemaze[0][1]=12;if(maze[0][2]!=3)maze[0][2]-=3;elsemaze[0][2]=12;if(maze[1][1]!=3)maze[1][1]-=3;elsemaze[1][1]=12;if(maze[1][2]!=3)maze[1][2]-=3;elsemaze[1][2]=12;}else if(k==4){if(maze[0][0]!=3)maze[0][0]-=3;elsemaze[0][0]=12;if(maze[1][0]!=3)maze[1][0]-=3;elsemaze[1][0]=12;if(maze[2][0]!=3)maze[2][0]-=3;elsemaze[2][0]=12;}else if(k==5){if(maze[0][1]!=3)maze[0][1]-=3;elsemaze[0][1]=12;if(maze[1][0]!=3)maze[1][0]-=3;elsemaze[1][0]=12;if(maze[1][1]!=3)maze[1][1]-=3;elsemaze[1][1]=12;if(maze[1][2]!=3)maze[1][2]-=3;elsemaze[1][2]=12;if(maze[2][1]!=3)maze[2][1]-=3;elsemaze[2][1]=12;}else if(k==6){if(maze[0][2]!=3)maze[0][2]-=3;elsemaze[0][2]=12;if(maze[1][2]!=3)maze[1][2]-=3;elsemaze[1][2]=12;if(maze[2][2]!=3)maze[2][2]-=3;elsemaze[2][2]=12;}else if(k==7){if(maze[1][0]!=3)maze[1][0]-=3;elsemaze[1][0]=12;if(maze[1][1]!=3)maze[1][1]-=3;elsemaze[1][1]=12;if(maze[2][0]!=3)maze[2][0]-=3;elsemaze[2][0]=12;if(maze[2][1]!=3)maze[2][1]-=3;elsemaze[2][1]=12;}else if(k==8){if(maze[2][0]!=3)maze[2][0]-=3;elsemaze[2][0]=12;if(maze[2][1]!=3)maze[2][1]-=3;elsemaze[2][1]=12;if(maze[2][2]!=3)maze[2][2]-=3;elsemaze[2][2]=12;}else{if(maze[1][1]!=3)maze[1][1]-=3;elsemaze[1][1]=12;if(maze[1][2]!=3)maze[1][2]-=3;elsemaze[1][2]=12;if(maze[2][1]!=3)maze[2][1]-=3;elsemaze[2][1]=12;if(maze[2][2]!=3)maze[2][2]-=3;elsemaze[2][2]=12;}}void dfs(int k){//printf("%d**",k);if(k>ans)return ;if(success()){if(k-1<ans){ans=k-1;copy(ans);}if(k-1==ans){if(path[1]<pa[1])copy(ans);}printf("%d***",ans);return ;}for(int i=1;i<=9;i++){if(k>=4){if(path[k-3]==path[k-2] && path[k-2]==path[k-1]){if(i>path[k-1]){move(i);path[k]=i;dfs(k+1);back(i);}}else{if(i>=path[k-1]){move(i);path[k]=i;dfs(k+1);back(i);}}}else{if(i>path[i-1]){move(i);path[k]=i;dfs(k+1);back(i);}}}}void put(){for(int i=0;i<3;i++){for(int j=0;j<3;j++)printf("%d ",maze[i][j]);printf("\n");}printf("\n\n");}int main(){for(int i=0;i<3;i++)for(int j=0;j<3;j++)scanf("%d",&maze[i][j]);ans=27;dfs(1);for(int i=1;i<=ans;i++)printf("%d ",pa[i]);printf("%d\n",pa[ans]);system("pause");return 0;}*/
- USACO 1.4.2 The Clocks(DFS)
- USACO/The Clocks(DFS,BFS,枚举)
- Usaco 1.4.2 时钟(The Clocks)
- [USACO 1.4.2] The Clocks
- USACO 1.4.2 The Clocks
- USACO 1.4.2 The Clocks
- USACO 1.4 The Clocks (clocks)
- USACO 1.4-The Clocks
- USACO 1.4 The Clocks
- USACO 1.4 The Clocks (位操作+枚举+DFS)
- USACO:1.4.2 The Clocks 时钟(IOI 94) 解析
- 【USACO题库】1.4.2 The Clocks(搜索)
- USACO section 1.4.2 The Clocks
- 【USACO题库】1.4.2 The Clocks
- JZOJ1250.【USACO题库】1.4.2 The Clocks
- USACO Section 1.4 The Clocks (clocks)
- USACO Section 1.4 The Clocks
- usaco 1.5.2 The Clocks
- mysql分页sql基本原理
- 《每天工作4小时的程序员》 一个老外的意淫文章,不过可以用来参考
- (6) Spring 如何装配 集合类 以及 【第二种 依赖注入 方式】使用 构造器 注入
- 叫你快速阅读
- Java读取文件方法大全
- USACO 1.4.2 The Clocks(DFS)
- 使用Bundle在Activity之间交换数据
- do...while(0)的作用
- 1>BSCMAKE: error BK1506 : : No such file or directory 的解决
- 教你快速阅读
- Window下搭建SVN版本控制
- 性能诊断与调优之V$--V$SESSION_WAIT
- AOP的一些想法
- andriod__helloworld__操作