wikioi1174 靶形数独 搜索
来源:互联网 发布:cnc模拟软件 编辑:程序博客网 时间:2024/05/22 01:39
#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<vector>using namespace std;struct node{ int x,y; node(int xx,int yy){x=xx;y=yy;}};int score[10][10]={ {6,6,6,6,6,6,6,6,6}, {6,7,7,7,7,7,7,7,6}, {6,7,8,8,8,8,8,7,6}, {6,7,8,9,9,9,8,7,6}, {6,7,8,9,10,9,8,7,6}, {6,7,8,9,9,9,8,7,6}, {6,7,8,8,8,8,8,7,6}, {6,7,7,7,7,7,7,7,6}, {6,6,6,6,6,6,6,6,6}};vector<node> sd;int mp[10][10],ans;int inits;int a[10][10],b[10][10],c[10][10];bool flag;bool isok(int x,int y,int k){ if(a[x/3*3+y/3][k]||b[x][k]||c[y][k]) return false; return true;}int t=0;void dfs(int now,int sum){ if(++t>=8000000) return; if(now==sd.size()) { flag=true; ans=max(ans,sum); return; } for(int i=1;i<=9;i++) { int x=sd[now].x; int y=sd[now].y; if(isok(x,y,i)) { a[x/3*3+y/3][i]=b[x][i]=c[y][i]=1; dfs(now+1,sum+i*score[x][y]); a[x/3*3+y/3][i]=b[x][i]=c[y][i]=0; } }}int main(){ sd.clear(); flag=true; for(int i=0;i<9;i++) { for(int j=0;j<9;j++) { scanf("%d",&mp[i][j]); if(!mp[i][j]) continue; a[i/3*3+j/3][mp[i][j]]++; b[i][mp[i][j]]++; c[j][mp[i][j]]++; if(a[i/3*3+j/3][mp[i][j]]>=2||b[i][mp[i][j]]>=2||c[j][mp[i][j]]>=2) flag=false; } } inits=0; for(int i=8;flag&&i>=0;i--) for(int j=8;flag&&j>=0;j--) { if(mp[i][j]) { inits+=mp[i][j]*score[i][j]; } else sd.push_back(node(i,j)); } if(flag==false) {printf("-1\n");return 0;} ans=0; flag=false; dfs(0,inits); if(flag) printf("%d\n",ans); else printf("-1\n"); return 0;}
4 0
- wikioi1174 靶形数独 搜索
- wikioi1174 靶形数独 搜索
- 【搜索】靶形数独
- [NOIP2009]靶形数独【搜索】
- NOIP2009 靶形数独(搜索)
- 【搜索】[NOIP 2009]靶形数独
- noip2009 靶形数独 (搜索)
- 【搜索】DLX解靶形数独
- 搜索-洛谷P1074 靶形数独
- P1074 靶形数独(搜索+剪枝)
- 测试靶形数独
- 靶形数独
- 靶形数独
- 靶形数独
- NOIP2009 靶形数独
- NOIP2009 靶形数独
- [codevs1174] 靶形数独
- [vijos1755]靶形数独
- 制作 OS X Mavericks 的全新安装 U 盘
- 记录-SqlServer 重建索引
- 浮点型小数转为二进制数。
- 2014-05-06 我日
- k-d tree算法的研究
- wikioi1174 靶形数独 搜索
- stm32F407ADC采样配置
- 二进制的应用之暴力取状态
- jquery之动态级联下拉列表
- 能量项链_DP
- 《c primer》第234页,loccheck程序
- 基于数组的优先级队列
- 我心目中的代码三要素
- TextView超过了多行,添加省略号