2015ccpc G
来源:互联网 发布:mac雪花高光粉饼试色 编辑:程序博客网 时间:2024/05/20 05:26
点击打开链接
题意:给定一个9*9的棋盘,问黑子能否在下一步将白子围住。
由于数据不大,可以直接将'.'换成'x',用DFS搜索。
AC code
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;typedef long long ll;char chess[11][11];bool visit[11][11];int turnx[4]={1,-1,0,0};int turny[4]={0,0,1,-1};int flag;bool in(int x,int y){ if(x<0||y<0||x>=9||y>=9) return 0; return 1;}void dfs(int x,int y)//寻找以o为初始点周围是不是没有出路了,即没有.出现{ if(chess[x][y]=='.')//如果有出路,则标记为0,说明在该点下子无法获胜 { flag=0; return; } for(int k=0;k<4;k++) { int nx=x+turnx[k]; int ny=y+turny[k]; if(in(nx,ny)&&!visit[nx][ny]&&chess[nx][ny]!='x') { visit[nx][ny]=1; dfs(nx,ny); } }}int solve(){ for(int i=0;i<9;i++) { for(int j=0;j<9;j++) { if(chess[i][j]=='.') { chess[i][j]='x'; for(int k=0;k<4;k++) { int nx=i+turnx[k]; int ny=j+turny[k]; if(in(nx,ny)&&chess[nx][ny]=='o') { memset(visit,0,sizeof(visit)); visit[nx][ny]=1; flag=1; dfs(nx,ny); if(flag) return 1;//直接返回,跳出循环 } } chess[i][j]='.';//还原 } } } return 0;}int main(){ int T,cas=1;scanf("%d",&T); while(T--) { for(int i=0;i<9;i++) scanf("%s",chess[i]); flag=1; memset(visit,0,sizeof(visit)); int ans=solve(); if(ans) printf("Case #%d: Can kill in one move!!!\n",cas++); else printf("Case #%d: Can not kill in one move!!!\n",cas++); } return 0;}
阅读全文
0 0
- 2015 ccpc G题解
- 2015ccpc G
- 2015ccpc——G
- 2015 南阳 CCPC G.Ancient Go
- 2015 CCPC G题 【DFS 暴力】
- CCPC长春 G Instability
- CCPC-CDOJ-1221-G题
- 2017 CCPC 秦皇岛 G题
- 2017 CCPC 秦皇岛 G题
- 南阳CCPC G题 Ancient Go
- CCPC 2015 A题
- 2015 CCPC D题
- 2015 CCPC Ancient Go
- 2015 ICPC && CCPC - 小记
- 2015南阳CCPC Hdu5547
- CCPC 2015 部分题解
- 2015南阳CCPC D
- ccpc!
- Spring和AOP之间的详解
- SpringBoot简单入门(一)
- 【lightoj1010】
- 洛谷P1533 可怜的狗狗
- 算法提高 11-2删除重复元素
- 2015ccpc G
- Master-Mind Hints—UVa340
- 凸函数
- 两年Java开发工作经验面试总结
- SpringBoot简单入门(二)
- Python 是什么
- 浅谈kvo
- csdn博客转载
- 数据库的基本操作