HOJ 2581 Go-------------------BFS 围棋中所占地盘的计算
来源:互联网 发布:成都卧龙大数据创始人 编辑:程序博客网 时间:2024/05/23 00:18
HOJ 2581
//题意:求围棋中白方和黑方的棋子,然后判断谁win//思路:BFS//hint:涉及到标志的问题,我是看网上的,我自己标志完全弄乱啦,具体看代码吧!#include<iostream>#include<queue>#include<cstring>#define maxlen 22#include<cstdio>int mat[maxlen][maxlen],black,white;int dir[4][2]= {{-1,0},{1,0},{0,-1},{0,1}};using namespace std;struct node{ int x,y;};void BFS(node s,int n){ int f1=0,f2=0,count=0; queue<node> q; node ol,ne; while(!q.empty()) { q.pop(); } q.push(s); mat[s.x][s.y]=3; while(!q.empty()) { ol=q.front(); q.pop(); count++; //出队之后count再更新,入队不更新 for(int i=0; i<4; i++) { ne.x=ol.x+dir[i][0]; ne.y=ol.y+dir[i][1]; if(ne.x>=1&&ne.x<=n&&ne.y>=1&&ne.y<=n) { if(mat[ne.x][ne.y]==0) { mat[ne.x][ne.y]=3; q.push(ne); } else if(mat[ne.x][ne.y]==1) f1=1; else if(mat[ne.x][ne.y]==2) f2=1; } } } if(f1+f2!=2)//只要遇到两个都有这种情况,那么就说明这种情况是黑白棋包围 { if(f2) black+=count; if(f1) white+=count; }}int main(){ int n,b,w,i,j; node s; while(cin >> n&& n) { black=0,white=0; memset(mat,0,sizeof(mat)); cin >> b >> w; while(b--) { cin >> i >> j; mat[i][j]=2;//b } while(w--) { cin >> i >> j; mat[i][j]=1;//w } for(i=1; i<=n; i++) for(j=1; j<=n; j++) { if(mat[i][j]==0) { s.x=i; s.y=j; BFS(s,n); } } if(black>white)printf("Black wins by %d\n",black-white); else if(white>black) printf("White wins by %d\n",white-black); else printf("Draw\n"); } return 0;}
- HOJ 2581 Go-------------------BFS 围棋中所占地盘的计算
- C++类的所占内存大小计算)
- 计算对象所占的内存空间
- struct所占空间的计算
- Hoj 2581 Go
- 结构体在内存中所占空间大小的计算
- 结构体在内存中所占空间大小的计算
- 结构体在内存中所占空间大小的计算
- 结构体在内存中所占字节大小计算
- 结构体在内存中所占字节大小计算
- 如何计算C语言中结构体所占内存
- C++中类所占的存储空间
- C++中对象所占的内存大小
- Oracle中汉字所占的字节
- 计算字体所占大小
- 计算文字所占大小
- 计算某个文件夹所占的磁盘空间大小
- 如何计算产生SPWM所需要的占空比
- 二维数组练习
- 玩安卓的游戏开发 留着备查
- 从android APP 链接到play商店
- javascript 求json对象的笛卡尔乘积
- Qt 布局管理器
- HOJ 2581 Go-------------------BFS 围棋中所占地盘的计算
- Android系统 广播Intent 小结
- PPPOE协议介绍
- StrToHex
- 字节顺序:大端模式 和 小端模式
- JavaSE第一百讲:线程同步问题深度剖析
- Android--短信窃听器及黑名单拦截
- 判断二叉树是否平衡
- apache对php支持的配置