| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 862 人关注过本帖
标题:找国王- -有多少部落
只看楼主 加入收藏
yixiufly
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-3-17
结帖率:0
收藏
已结贴  问题点数:20 回复次数:13 
找国王- -有多少部落
一张N*N地图,地图中*表示有人区,#表示无人区。有人区与其上下左右四个方位的有人区属于同一个部落,每个部落只有一个国王,算出有多少国王?N小于15,算出有人区最多的部落和最少的部落的差值。

例如: 输入  * * * #  ,   # # * # ,  # # # * , # # * #
    输出的是   4  3


给点思路啊 ,我感觉这个我有点绕不过来。。。。

计算一行的时候,用++操作判断后一个属不属于有人区,直到没有算是一个部落,但是这个上下怎么判断? 然后空一格又该怎么处理? 不懂啊。。。。。写不出来。。。求大神指点指点- -
搜索更多相关主题的帖子: 左右 无人区 
2015-07-13 20:51
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:3 
直接找一本有关算法的书看看
2015-07-13 21:27
老衲法海
Rank: 1
等 级:新手上路
帖 子:1
专家分:3
注 册:2015-6-19
收藏
得分:3 
具体怎么做我也不清楚,我也是新手,思路应该是用递归去做,然后将同一个部落的有人区全部标记了,防止重复!!
2015-07-13 21:34
孤独一生
Rank: 2
来 自:四川达县
等 级:论坛游民
帖 子:45
专家分:55
注 册:2013-4-1
收藏
得分:3 
大哥 这是学习交流平台, 你这样搞这还叫学习交流吗,编程可是很费时间的
2015-07-13 21:46
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:3 
我不喜欢递归,暂时只想出一个简单但效率差的算法

从1到226,替换原有'*'位置
循环 { 自身的新值=自身及上下左右5个值的最小值 },当没有任何值改变时结束循环
遍历地图,算出一共有多少个数,及最多的数和最少的数的数目
2015-07-14 08:34
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:3 
参考一下图形学算法判断点是否在多边形内

一片落叶掉进了回忆的流年。
2015-07-14 08:46
丢教授
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2015-7-12
收藏
得分:3 
新人报道
2015-07-14 09:17
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:3 
这不就是找连片么,图形区域着色和围棋里找连片子都用到,我曾经用的算法有两种,一是递归,就是对*的四个方向递归,二是使用二维数组存储四个方向的坐标,两个方法都要改变数据状态,防止重复计算。

能编个毛线衣吗?
2015-07-14 09:25
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:3 
感觉就和以前做过的扫雷游戏中打开点击格相邻的所有非雷区差不多。

大开眼界
2015-07-14 09:40
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
用递归做的一个,供楼主参考
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define rl 10  //定义地图大小为10*10
void findlink(char a[][rl],int x,int y,int l)
{//递归求连片部落
    int i,j;
    i=x;j=y;
    a[i][j]=l+'A';  //将连片部落改成大写字母表示
    i=x-1;
    if(i>=0&&a[i][j]=='*')findlink(a,i,j,l);  //向上查看
    i=x+1;
    if(i<rl&&a[i][j]=='*')findlink(a,i,j,l);  //向下查看
    i=x;j=y-1;
    if(j>=0&&a[i][j]=='*')findlink(a,i,j,l);  //向左查看
    j=y+1;
    if(j<rl&&a[i][j]=='*')findlink(a,i,j,l);  //向右查看
}

void main()
{
    char map[rl][rl];
    int i,j,k,l;
    for(i=0;i<rl;i++)
    {
        for(j=0;j<rl;j++)
        {
            map[i][j]='*';
            if(rand()%2)map[i][j]='#';
            printf("%c",map[i][j]);  //产生10*10的随机地图并打印
        }
        printf("\n");
    }
    l=0;
    for(i=0;i<rl;i++)
    {
        for(j=0;j<rl;j++)
        {
            if(map[i][j]=='*')
            {
                findlink(map,i,j,l++);
            }
        }
    }
    printf("\n%d个国王\n\n",l);
    for(i=0;i<rl;i++)
    {
        for(j=0;j<rl;j++)
        {
            printf("%c",map[i][j]);  //打印各部落图形,每个连片部落用一个大写字母表示
        }
        printf("\n");
    }
}

图片附件: 游客没有浏览图片的权限,请 登录注册
收到的鲜花
  • 狐兮魂轨2015-07-14 12:47 送鲜花  1朵   附言:我很赞同 有问题,就解决了,不是靠嘴吹的 ...

能编个毛线衣吗?
2015-07-14 10:49
快速回复:找国王- -有多少部落
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038842 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved