zju1008
来源:互联网 发布:java enum 例子 编辑:程序博客网 时间:2024/05/27 00:29
#include <stdio.h>
int map[30][4];//最多25个squares,每个squares包含四个三角形
int a[30], f[30];
int n2, n, tag, q;
bool Check(int i)
{
/*判断当前squares是否合法,只要判断该方格的
3号和其左方的squares的1号相同
0号和其上方的squares的2号相同
*/
if(i >= n && map[a[i]][0] != map[a[i - n]][2]) return false;
if(i % n != 0 && map[a[i]][3] != map[a[i - 1]][1]) return false;
return true;
}
void change(int k)
{
//只有该squares的前面的squares放置好,才放置当前squares
if(k == n2){
tag = 1;
return;
}
int i;
for(i = 0;i < q;i++){
if(tag == 1) return;
else if(f[i] > 0){
f[i]--;
a[k] = i;
if(Check(k)) change(k + 1);
f[i]++;
}
}
}
int main()
{
int i, j;
int top, right, bottom, left;
int test = 0;
while(scanf("%d", &n) == 1 && n){
if(test) printf("/n");
n2 = n * n;
q = 0;
for(i = 0;i <= n2;i++) f[i] = 0;
for(i = 0;i < n2;i++){
scanf("%d%d%d%d", &top, &right , &bottom, &left);
j = 0;
while(j < q){
if(top == map[j][0] && right == map[j][1]
&& bottom == map[j][2] && left == map[j][3]){
f[j]++;
break;
}
j++;
}
if(j == q){
map[q][0] = top;
map[q][1] = right;
map[q][2] = bottom;
map[q][3] = left;
f[q] = 1;
q++;
}
}
tag = 0;
change(0);
if(tag == 1) printf("Game %d: Possible/n", ++test);
else printf("Game %d: Impossible/n", ++test);
}
return 0;
}
- zju1008
- zju1008题解Gnome Tetravex
- 工作需要,返回台湾
- DataRabbit 轻量的数据访问框架(04) -- IEntityRelationLoader
- 信息经济学
- 图片格式介绍
- 高效率C/C++Builder 2006程序设计研讨会
- zju1008
- Turbo产品系列回来了!
- DataRabbit 轻量的数据访问框架(05) -- ITableAccesser
- 我以前的痛苦,你也拥有吗?
- DataRabbit 轻量的数据访问框架(06) -- IRelationAccesser
- 您也是打痛苦混战的高手吗?
- asp.net Excel导入&导出
- 转一条个人网站上的新闻。
- Delphi.NET多层应用系统开发技术研讨会