您的位置:首页 > 其它

和尚挑水问题

2014-12-17 10:25 183 查看
这是一道华为的机试题,题目是这样的:

有七个和尚,寺庙七天中每天要安排一个人挑水。现在有一个时间表,上面记录了每个和尚七天中有空的日期,请输出所有可能的挑水值日表!

这个题目很像八皇后问题,用递归应该很容易就实现了!

#include <cstdio>
#define MAX 7 //和尚的人数和天数
int dataTable[MAX][MAX];	//记录和尚有空的时间表
int flag[MAX];			//记录和尚是否已经被选取到值日表中
int ans[MAX];				//值日表
void init()
{

//初始化变量,并且输入时间表
for(int i=0;i<MAX;i++)
{
flag[i]=0;
ans[i]=-1;
for(int j=0;j<MAX;j++)
dataTable[i][j]=0;
/************************************************************************/
/* 输入和尚i的时间表                                                                     */
/************************************************************************/

}
}
void Guess(int step)
{
//step表示已经确定了step之前的值日表
if(step==MAX)
{
//选择已经完成了
printf("\n");
for(int i=0;i<MAX;i++)
printf("%c ",ans[i]+'A');
}
//选择还没完成了
for(int i=0;i<MAX;i++)
{
//对于和尚i
if((!flag[i])&&dataTable[i][step])
{
ans[step]=i;
flag[i]++;
Guess(step+1);
flag[i]--;
}
}

}
int main(int argc,char* argv[])
{
init();//这个init不能保证生成的所有时间表都有结果
Guess(0);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: