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

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


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

计算一行的时候,用++操作判断后一个属不属于有人区,直到没有算是一个部落,但是这个上下怎么判断? 然后空一格又该怎么处理? 不懂啊。。。。。写不出来。。。求大神指点指点- -
搜索更多相关主题的帖子: 左右 无人区 
2015-07-13 20:51
yixiufly
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-3-17
收藏
得分:0 
回复 4楼 孤独一生
我自己的思路已经写好了,编译结果总是不对啊。。。只能求思路了。。。虽然我想用的也是递归
2015-07-14 23:00
yixiufly
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-3-17
收藏
得分:0 
回复 5楼 rjsp
我想的差不多也是这样,循环,然后判断遇到的是不是*,如果是,判断其上下左右,然后延伸,遍历过的改符号,例如‘1’。应该是算法不对了。。。。。新手,表示想不出来。。。。(⊙﹏⊙)b
#include<stdio.h>

int FindKing(int N, char *tride)
{
    int i;
    int king = 0;//国王
    char *p = tride;
for(i = 0; i < N*N-1; i++)
{
    if(p[i] = '*')
    {
        int m = i + 1;
        int n = i + N;
        if(p[m] == '*' && p[n] != '*')
        {
            p[m] = '1';
            p++;
            if(p[m] != '*'&& p[n] != '*')
            {
                king++;//   国王个数
                break;
            }
        }
        else if(p[m] != '*' && p[n] == '*')
        {
            p[n] = '1';
            n += N;
            if(p[m] != '*'&& p[n] != '*')
            {
                king++;//   国王个数
                break;
            }
        }
        else if(p[m] == '*' && p[n] == '*')
        {
            p[m] = '1';
            m++;
            if(p[m] != '*'&& p[n] != '*')
            {
                king++;//   国王个数
                break;
            }
        }
        else if(p[m] != '*'&& p[n] != '*')
            {
                king++;//   国王个数
                break;
            }
    }
}
}
int main()
{
    int i = 0;
    int N;
    char tride[300];
    scanf("%d",&N);
    getchar();
    gets(tride);
    FindKing(N,tride);
    return 0;
}


我这么写的。。。。漏洞太多。。。
2015-07-14 23:28
yixiufly
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-3-17
收藏
得分:0 
回复 10楼 wmf2014
谢谢啦。。。。我参考参考,自己的我改改看看能不能修正下。。。。
其实我自己有写,就是太渣。。。。所以这里交流下,,,,提升提升- -

这是代码- - 完全不对。。(⊙﹏⊙)b  新人水平不行
我努力瞅瞅- -合并下
#include<stdio.h>

int FindKing(int N, char *tride)
{
    int i;
    int king = 0;//国王
    char *p = tride;
for(i = 0; i < N*N-1; i++)
{
    if(p[i] = '*')
    {
        int m = i + 1;
        int n = i + N;
        if(p[m] == '*' && p[n] != '*')
        {
            p[m] = '1';
            p++;
            if(p[m] != '*'&& p[n] != '*')
            {
                king++;//   国王个数
                break;
            }
        }
        else if(p[m] != '*' && p[n] == '*')
        {
            p[n] = '1';
            n += N;
            if(p[m] != '*'&& p[n] != '*')
            {
                king++;//   国王个数
                break;
            }
        }
        else if(p[m] == '*' && p[n] == '*')
        {
            p[m] = '1';
            m++;
            if(p[m] != '*'&& p[n] != '*')
            {
                king++;//   国王个数
                break;
            }
        }
        else if(p[m] != '*'&& p[n] != '*')
            {
                king++;//   国王个数
                break;
            }
    }
}
}
int main()
{
    int i = 0;
    int N;
    char tride[300];
    scanf("%d",&N);
    getchar();
    gets(tride);
    FindKing(N,tride);
    return 0;
}
2015-07-14 23:30
yixiufly
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-3-17
收藏
得分:0 
我是这么想的,一个向右遍历,一个向下遍历;如果右边遇上“*”,下边是“#”,则标记右边为“1”,然后右边++,继续操作;  如果右边遇上“#”,下边“*”,则下边标记“1”,然后标记的下边那个 (i+N)继续操作;  直到遇到右边和下边都是“#”,然后king + 1,国王加 1 。  ( ⊙ o ⊙ )!   新人表示只能考虑到这个地步了
2015-07-14 23:40
快速回复:找国王- -有多少部落
数据加载中...
 
   



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

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