ZOJ-1008-Gnome Tetravex
来源:互联网 发布:淘宝店铺一键装修 编辑:程序博客网 时间:2024/04/26 15:44
一道不算难的DFS题,但是这个题要注意下其测试数据存在重复方块,如果不考虑去重的情况就会超时。另外换行符不能多输出,Game 1: 分号后面还有一个空格~
代码:
#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=30;struct node{ int top; int buttom; int left; int right; int num; bool operator == (const node& a)const {if(top==a.top&&buttom==a.buttom&&left==a.left&&right==a.right) return true;return false; }}a[30];int n,m,dex[maxn][maxn];bool ans;void DFS(int now){ if(ans)return ; if(now==n*n) {ans=true;return ; } int x=now/n; int y=now%n; for(int i=0;i<m;i++) {if(!a[i].num) continue;if(x>0&&a[i].top!=a[dex[x-1][y]].buttom) continue;if(y>0&&a[i].left!=a[dex[x][y-1]].right) continue;a[i].num--;dex[x][y]=i;DFS(now+1); if(ans) return;a[i].num++; }}int main(){ int cas=1; while(scanf("%d",&n)&&n) {ans=m=false;for(int i=0;i<n*n;i++){ scanf("%d%d%d%d",&a[i].top,&a[i].right,&a[i].buttom,&a[i].left); a[i].num=1; bool find=0; for(int j=0;j<m;j++)if(a[i]==a[j]){ a[j].num++; find=1; break;} if(!find)a[m++]=a[i];}DFS(0);if(cas>1) printf("\n");printf("Game %d: ",cas++);if(ans) printf("Possible\n");else printf("Impossible\n"); } return 0;}
- 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
- ZOJ-1008 Gnome Tetravex
- ZOJ - 1008 Gnome Tetravex
- ZOJ 1008 Gnome Tetravex
- ZOJ 1008 Gnome Tetravex
- ZOJ 1008 Gnome Tetravex
- ZOJ 1008 Gnome Tetravex
- zoj 1008 Gnome Tetravex
- zoj 1008 Gnome Tetravex
- ZOJ 1008 Gnome Tetravex
- ZOJ - 1008 Gnome Tetravex
- C++中的单例模式
- Boost asio--tcp server---1(无封装阻塞)
- ffmpeg中available protocols
- 职业探秘:游戏测试员
- 用OpenCv创建视频
- ZOJ-1008-Gnome Tetravex
- 关于STM32 MDK中USE_STDPERIPH_DRIVER问题的解释(转)
- 采用PHP函数memory_get_usage获取PHP内存清耗量的方法
- 选择电子邮件系统该从哪些角度考虑?
- 现实世界的LISP:Clojure语言初探
- BattleBeat(战斗节奏)
- 流程定义的管理
- dede后台开发视频教学
- UltraEdit中java编译运行设置方法