zoj 1008 Gnome Tetravex
2015-06-06 23:31
405 查看
开一个数组储存每种正方形有几个,不然会超时……
[code]#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <set> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; int mp[30][5],n,flag,p[10][10],sum[30],cnt; int check(int k,int i) { int x,y,f=1; x=k/n; y=k%n; if(x==0&&y==0) return 1; if(x-1>=0) { if(mp[i][1]!=mp[p[x-1][y]][3]) f=0; } if(y-1>=0) { if(mp[i][4]!=mp[p[x][y-1]][2]) f=0; } if(f) return 1; else return 0; } void dfs(int k) { int i,j,x,y; if(k==n*n) { flag=1; return; } for(i=0; i<cnt; i++) { if(sum[i]==0) continue; if(check(k,i)) { x=k/n; y=k%n; p[x][y]=i; sum[i]--; dfs(k+1); sum[i]++; if(flag==1) return; } } return; } int main() { int cas=0,i,j,a,b,c,d; while(~scanf("%d",&n)&&n) { cnt=0; memset(sum,0,sizeof(sum)); if(cas) printf("\n"); for(i=0; i<n*n; i++) { scanf("%d%d%d%d",&a,&b,&c,&d); for(j=0; j<cnt; j++) { if(mp[j][1]==a&&mp[j][2]==b&&mp[j][3]==c&&mp[j][4]==d) break; } if(j<cnt) sum[j]++; else { cnt++; sum[j]=1; mp[j][1]=a; mp[j][2]=b; mp[j][3]=c; mp[j][4]=d; } } flag=0; dfs(0); printf("Game %d: ",++cas); if(flag) printf("Possible\n"); else printf("Impossible\n"); } return 0; }
相关文章推荐
- C++ 画星号图形——圆形(核心代码记录)
- zoj 1008 Gnome Tetravex
- C#调用MATLAB 库函数记录
- sed (Stream Editor)
- android学习Activity笔记
- POJ 1042 Gone Fishing
- Python文件读取编码错误问题解决之(PyCharm开发工具默认设置的坑。。。)
- js/剪贴板
- hdu 5210 Greatest Greatest Common Divisor
- C++ 画星号图形——空心三角形(星号左对齐)(核心代码介绍)
- 【Bible for kids】 儿童圣经 App
- U-Boot启动Linux过程
- 错误 1 error LNK2019: 无法解析的外部符号 "public: __thiscall chain<int>::~chain<int>(void)" (??1?$chain@H@@QAE@
- System memory,AGP memory和video memory
- C++ 画星号图形——空心三角形(星号居中对齐)(核心代码介绍)
- strtok和strtok_r函数
- 线程池的总结
- 设置CMOS开机密码\设置windows开机密码
- 加州旅馆
- 函数传参之商品价格计算—JS学习笔记2015-6-6(第50天)