码迷,mamicode.com
首页 > 其他好文 > 详细

围棋程序

时间:2020-01-25 23:30:17      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:曲线   splay   class   统计   desc   就是   div   必须   size   

Description

小A喜欢围棋,这天他心血来潮想要设计一个围棋小游戏,但是一个基本的问题是:该如何计算闭合线段围成的面积呢?

比如在下面这个5*5的由“0 1”组成棋盘中,由“1”围出来的“0”的面积是:3。

0 0 0 0 0
0 1 1 1 1
0 1 0 1 0
1 0 0 1 1
1 1 1 1 0

规定:面积的计算方法是统计“1”所围成的闭合曲线中水平线和垂直线交点的数目,特别地,在边上的0不被计算,如第3行第5列的“0”不算作面积。

Input

一个10*10的棋盘矩阵,棋盘中每个点由0、1组成。

Output

由题意输出1围成的0的面积。

Sample Input

0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 1
0 0 0 1 1 1 0 0 0 0
0 0 0 1 0 0 1 1 1 0
0 0 0 0 1 1 0 0 0 1
0 0 0 0 0 1 0 0 1 0
0 0 0 1 1 0 0 1 0 0
0 0 0 1 0 0 0 1 0 0
0 0 0 0 1 1 1 0 0 0
0 0 0 0 1 1 1 0 0 0

Sample Output

12
技术图片
 1 #include<iostream>
 2 //#include<fstream>
 3 using namespace std;
 4 int a[100][100];
 5 int dir[4][2]={1,0,0,-1,-1,0,0,1};
 6 void dfs(int x,int y){
 7     a[x][y]=1;
 8     int dx,dy;
 9     for(int i=0;i<4;i++){
10         dx=x+dir[i][0];
11         dy=y+dir[i][1];
12         if(dx>=1&&dx<=10&&dy>=1&&dy<=10&&!a[dx][dy])
13             dfs(dx,dy);
14     }
15 }
16 int main(){
17     int ans=0;
18     //fstream file("haha.txt");
19     for(int i=1;i<=10;i++){
20         for(int j=1;j<=10;j++){
21             //file>>a[i][j];
22             cin>>a[i][j];
23         }
24     }
25     for(int i=1;i<=10;i++){
26         if(!a[1][i])    dfs(1,i);
27         if(!a[10][i])    dfs(10,i);
28         if(!a[i][1])    dfs(i,1);
29         if(!a[i][10])    dfs(i,10);
30     }
31     for(int i=1;i<=10;i++){
32         for(int j=1;j<=10;j++){
33             if(!a[i][j])
34                 ans++;
35         }
36     }
37     cout<<ans<<endl;
38     return 0;
39 }
View Code

 

首先说方法,我们要把圈外的0都变成1,然后遍历整个数组数一数一共有几个0那么围成的面积就是几

然后说一下怎么实现,主体思想是用dfs或者bfs,因为我们只想把圈外的0变成1,所以我们从边缘开始搜索

    for(int i=1;i<=10;i++){
        if(!a[1][i])    dfs(1,i);
        if(!a[10][i])    dfs(10,i);
        if(!a[i][1])    dfs(i,1);
        if(!a[i][10])    dfs(i,10);
    }

这个代码实现的就是这一块,注意必须要从边缘开始,不能遍历整个数组搜索,如果遍历整个数组搜索的话,数组里所有的0都会变成1了。

然后就是dfs的思想,上下左右连一块的算连着,斜着的不算,从边缘开始,所有连着的0变成1。





围棋程序

标签:曲线   splay   class   统计   desc   就是   div   必须   size   

原文地址:https://www.cnblogs.com/fate-/p/12233487.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!