ZOJ--1008:Gnome Tetravex(剪枝dfs)
来源:互联网 发布:tcp20端口和21端口 编辑:程序博客网 时间:2024/05/24 16:17
刚开始 做了一下 超时 然后看网上说要用 剪枝 有趣查了剪枝算法 结果 测试用例(自己写了好多测试用例)都可以通过 但是就是一直WA 想哭
import java.util.Scanner;public class Gnome_Tetravex {static int n,arr[][],put[],cnt[],cn,game;static boolean can;public static void main(String[] args) {Scanner s=new Scanner(System.in); while((n=s.nextInt())!=0){arr=new int[25][4];put=new int[25];cnt=new int[25];can=false;cn=0;int j;for(int i=0;i<n*n;i++){for(j=0;j<cn;j++)if(arr[j][0]==arr[i][0]&&arr[j][1]==arr[i][1]&&arr[j][2]==arr[i][2]&&arr[j][3]==arr[i][3])break;if(j==cn){arr[cn][0]=s.nextInt();arr[cn][1]=s.nextInt();arr[cn][2]=s.nextInt();arr[cn][3]=s.nextInt();cn++;}cnt[j]++;}game++;dfs(0);if(game>1)System.out.println();System.out.print("Game "+game+": ");if(can)System.out.print("Possible");elseSystem.out.print("Impossible");}}public static void dfs(int k){if(!can&&k==n*n){can=true;return;}else if(!can){for(int i=0;i<cn;i++){if(cnt[i]!=0&&(k%n==0||arr[put[k-1]][1]==arr[i][3])&&(k-n<0||arr[put[k-n]][2]==arr[i][0])){put[k]=i;cnt[i]--;dfs(k+1);cnt[i]++;}}}}}
C++版:
#include <map> #include <set> #include <queue> #include <stack> #include <math.h> #include <vector> #include <cstdio> #include <string> #include<string.h> #include <iostream> #include <algorithm> using namespace std; typedef long long ll; int m[30][5],n,cnt; int id[6][6]; int num[30]; bool ok; void dfs(int x,int y) { if(ok) return ; if(x>n) { ok=1; return; } for(int i=1;i<cnt;i++) { if(num[i]==0) continue; if(x>1&&m[id[x-1][y]][3]!=m[i][1]) continue; if(y>1&&m[id[x][y-1]][2]!=m[i][4]) continue; id[x][y]=i; num[i]--; if(y!=n) dfs(x,y+1); else dfs(x+1,1); if(ok) return ; num[i]++; } } int main() { int cas=0; while(cin>>n&&n) { cnt=1; memset(num,0,sizeof(num)); for(int i=0;i<n*n;i++) { int a,b,c,d,j; cin>>a>>b>>c>>d; for(j=1;j<cnt;j++) if(m[j][1]==a&&m[j][2]==b&&m[j][3]==c&&m[j][4]==d) break; if(j==cnt) { m[j][1]=a; m[j][2]=b; m[j][3]=c; m[j][4]=d; cnt++; } num[j]++; } ok=0; dfs(1,1); if(cas) cout<<endl; cout<<"Game "<<cas+1<<": ";cas++; if(!ok) cout<<"Impossible\n"; else cout<<"Possible\n"; } return 0; }
阅读全文
0 0
- zoj 1008 Gnome Tetravex (dfs+剪枝)
- zoj 1008 Gnome Tetravex (DFS + 剪枝)
- ZOJ 1008 Gnome Tetravex (DFS + 剪枝)
- ZOJ--1008:Gnome Tetravex(剪枝dfs)
- ZOJ 1008(DFS+剪枝) Gnome Tetravex
- ZOJ 1008 Gnome Tetravex(DFS)
- ZOJ 1008 Gnome Tetravex(DFS)
- ZOJ 1008Gnome Tetravex DFS
- ZOJ 1008 Gnome Tetravex (使用状态进行DFS)
- zoj 1008 Gnome Tetravex (dfs+枚举)
- zoj 1008 Gnome Tetravex
- ZOJ 1008 Gnome Tetravex
- zoj 1008 Gnome Tetravex
- ZOJ 1008Gnome Tetravex
- ZOJ 1008 Gnome Tetravex
- ZOj 1008 Gnome Tetravex
- ZOJ-1008-Gnome Tetravex
- zoj 1008 Gnome Tetravex
- IEEE VIS Citations
- opencv2.4.9:为caffe编译精简的opencv_core,opencv_imgproc,opencv_highgui全静态库
- 自动装箱拆箱
- 天气开发4——第二行代码(酷欧天气)
- [AHK]函数的参数是传值,还是传引用?
- ZOJ--1008:Gnome Tetravex(剪枝dfs)
- TCP/IP协议
- IOS Swift3.1 获得文本宽度
- 安卓高级控件
- 动态规划:0-1背包问题
- QImage 与 cv::Mat 之间的相互转换
- 定义多个Activity以及启动一个Activity的方法
- CentOS 7.2 配置Apache服务(httpd)--上篇
- GAN生成对抗网络