| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 564 人关注过本帖
标题:c语言实现分书问题
只看楼主 加入收藏
pragma
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2010-12-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
c语言实现分书问题
最近递归的东西又有点忘了,再做几道题,把解题思路给大家分享

分书问题:有5本书要分给A\B\C\D\E五个人,试写一个程序输出所有可能的情况,5个人对5本书的兴趣是一个二维数组like[5][5],
like[i][j]=1表示第i个人喜欢第j本书
  \书   1    2    3    4    5
人 \____________________________
A  |    0    0    1    1    0
B  |    1    1    0    0    1
C  |    0    1    1    0    1
D  |    0    0    0    1    0
E  |    0    1    0    0    1
==================================================================
解题思路:可能的着手点是以人为中心,然后依次遍历每一个人可能的情况,另外一个思路就是以书为中心,依次遍历所有可能的情况,这里以后一种思路实现.
          这里需要依次遍历每一本书,找到一个人,对此本书感兴趣,而且这个人目前还没有分到书,将此本书分给此人,然后再去遍历下一本书,本问题需
          要计算所有可能情况,所以需要有回溯
程序代码:
/* 分书问题
*/
#include <stdio.h>

int like[5][5]=
{{0, 0, 1, 1, 0},{1, 1, 0, 0, 1},
{0, 1, 1, 0, 1},{0, 0, 0, 1, 0},
{0, 1, 0, 0, 1}};

/*book数组用于记录某一本书是否已经分出去
  0的时候代表没有,1代表已经分出去了*/
int book[5] = {0};

/*take数组记录了每一个人所领到的书的号码*/
int take[5] = {0};

/*分书程序,参数代表目前是第几本书*/
void Distribute(int read_num)
{
    int book_num = 0;
    int j = 0;
       

    for (book_num = 0; book_num < 5; book_num++)
    {
        if (1 == like[read_num][book_num] && 0 == book[book_num])
        {
            book[book_num] = 1;
            take[read_num] = book_num + 1;
            if (4 == read_num)
            {
                for (j = 0; j < 5; j++)
                    printf("第%d个人得到第%d本书\n", j + 1, take[j]);
            }
           

            Distribute(book_num + 1);
            book[book_num] = 0;
            take[read_num] = 0;
        }
    }
    return;
}

main()
{
    Distribute(0);
    return 0;
}

 
搜索更多相关主题的帖子: c语言 
2010-12-04 20:56
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:20 
顶下,

我就是真命天子,顺我者生,逆我者死!
2010-12-04 21:18
快速回复:c语言实现分书问题
数据加载中...
 
   



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

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