uva 639 - Don't Get Rooked
来源:互联网 发布:怎么恢复手机mac地址 编辑:程序博客网 时间:2024/06/08 02:35
原题
这题比起八皇后问题更复杂。有两种状态转移方式:直接进入下一行搜索;在这一行选一个,仍在这一行搜索。
#include<stdio.h>#include<string.h>#include<stdlib.h>struct Pos{int x,y;};Pos C[16];int n,max,mat[6][6],vis[6][6];int is_capture(int x,int y,int s){int i,j,ok;for(i=0;i<s;i++){if(C[i].x==x){ok=1;int y1,y2;y1=C[i].y<y? C[i].y:y;y2=C[i].y+y-y1;//printf("%d %d\n",y1,y2);for(j=y1+1;j<y2;j++) if(mat[C[i].x][j]){ok=0;break;}if(ok) return 1;}if(C[i].y==y){int x1,x2;x1=C[i].x<x? C[i].x:x;x2=C[i].x+x-x1;ok=1;//printf("%d %d\n",x1,x2);for(j=x1+1;j<x2;j++) if(mat[j][y]){ok=0;break;}if(ok) return 1;}}return 0;}void search(int cur,int s){if(cur==n) {if(max<s) max=s;}else{for(int i=0;i<n;i++) if(!mat[cur][i] && !vis[cur][i] && !is_capture(cur,i,s)) {C[s].x=cur;C[s].y=i;vis[cur][i]=1;search(cur,s+1);//search(cur+1,s+1);vis[cur][i]=0; } search(cur+1,s);} }int main(){#ifndef ONLINE_JUDGE freopen("639.txt","r",stdin);#endifchar s[6];while(scanf("%d",&n)==1 && n){int i,j;memset(mat,0,sizeof(mat));memset(vis,0,sizeof(vis));for(i=0;i<n;i++){scanf("%s",s);for(j=0;j<n;j++) if(s[j]=='X') mat[i][j]=1; else mat[i][j]=0;}//for(i=0;i<n;i++,printf("\n")) //for(j=0;j<n;j++) printf("%d",mat[i][j]); max=0; search(0,0); printf("%d\n",max);} return 0;}
- UVa 639 Don't Get Rooked
- uva 639 - Don't Get Rooked
- uva 639 - Don't Get Rooked
- uva 639 - Don't Get Rooked
- UVa 639 - Don't Get Rooked
- UVA 639 - Don't Get Rooked
- UVA 639 - Don't Get Rooked
- UVa 639 - Don't Get Rooked
- uva 639 Don't Get Rooked
- UVA 639 Don't Get Rooked
- UVA 639- Don't Get Rooked
- uva 639 Don't Get Rooked
- [回溯]Don't Get Rooked UVA 639
- uva 639 Don't Get Rooked
- uva - 639 - Don't Get Rooked
- UVa 639 - Don't Get Rooked
- uva 639 - Don't Get Rooked
- uva 639 - Don't Get Rooked
- pkg-config的用法
- Myeclipse使用技巧
- 通过注册表来设置修改默认浏览器的方法
- 简单使用ADO测试数据源
- 处理 Top
- uva 639 - Don't Get Rooked
- 二叉树2
- 读取目录下所有的文件名
- 腾讯QQ音乐业务产品规划
- CSS div横向布局
- iBatis自动生成的主键返回问题
- C++学习笔记之三
- JQuery 对象和DOM对象的相互转化
- Linux操作系统内核启动参数详细解析