NYOJ587blockhouses
来源:互联网 发布:手机淘宝怎么查号 编辑:程序博客网 时间:2024/05/21 09:37
题目大意:
题目大意,在一块方形的阵地上,有墙和空地,墙上不能放置炮弹,但是炮弹也炸不开墙,每一枚炮弹可以向东南西北四个方向发射弹药,但是遇到墙就会被挡住。现在要求你在这块阵地上尽可能多的布置炮弹,每两枚炮弹之间不得互相攻击。
解题思路:
仔细观察的话这题其实是八皇后问题的一个变种,而且数据范围也小,直接暴力搜索就过了。但是过了之后看有0秒的,然后弱弱的膜拜了一下大神的代码,总结了一点。不带剪枝的搜索都是瞎扯,等于白做啊。
自己写的代码:(40ms)
#include<stdio.h>int Map[5][5];int n;int ans;int Max(int a,int b){ return a>b?a:b;}bool check(int row,int col){ int i=row+1; while(i<n){ if(Map[i][col]==1) return false; if(Map[i][col]==2) break; ++i; } i=row-1; while(i>=0){ if(Map[i][col]==1) return false; if(Map[i][col]==2) break; --i; } i=col+1; while(i<n){ if(Map[row][i]==1) return false; if(Map[row][i]==2) break; ++i; } i=col-1; while(i>=0){ if(Map[row][i]==1) return false; if(Map[row][i]==2) break; --i; } return true;}void dfs(int row,int col,int num){ int i,j; ans=Max(ans,num); for(i=0;i<n;i++) for(j=0;j<n;j++) if(!Map[i][j]) if(check(i,j)){ Map[i][j]=1; dfs(i+1,j+1,num+1); Map[i][j]=0; } }int main(){int i,j;char temp;while(scanf("%d",&n)&&n){ ans=0; getchar(); for(i=0;i<n;i++){ for(j=0;j<n;j++){ scanf("%c",&temp); if(temp=='X'){ Map[i][j]=2; }else{ Map[i][j]=0; } } getchar(); } dfs(0,0,0); printf("%d\n",ans); }}
大神的代码:(0ms)这就是差距啊!!!!
#include <stdio.h>#include <string.h>char map[5][5];int n, ans;bool check(int x, int y){if (map[y][x] == 'X')return false;for (int i=x; i>0; --i){if (map[y][i] == 1)return false;else if (map[y][i] == 'X')break;}for (int i=y; i>0; --i){if (map[i][x] == 1)return false;else if (map[i][x] == 'X')break;}return true;}void dfs(int x, int y, int cur){if (x == n+1){if (y == n){ans = ans>cur?ans:cur;return;}y++;x = 1;}if (!check(x, y)){dfs(x+1, y, cur);return;}map[y][x] = 1;dfs(x+1, y, cur+1);map[y][x] = '.';dfs(x+1, y, cur);}int main(){while (scanf("%d", &n), n){memset(map, 0, sizeof(map));for (int i=1; i<=n; ++i){scanf("%s", &map[i][1]);}ans = 0;dfs(1, 1, 0);printf("%d\n", ans);}return 0;}
0 0
- NYOJ587blockhouses
- NYOJ587blockhouses
- NYOJ587blockhouses(深搜)
- 数据库多表查询
- ADF11g-043:setCurrentRowWithKeyValue和setCurrentRowWithKey的区别
- 怎么优化query
- String,StringBuffer,StringBuilder
- 法国家庭游客不顾
- NYOJ587blockhouses
- argparse解析器 转自http://www.2cto.com/kf/201208/149418.html
- 下次别让热撒
- iphone 实现下拉菜单
- 在Android开发中,如何结束整个应用程序
- eclipse sip插件
- MySQL存储过程和函数
- 种花的邮差
- nftl算法分析