华为机试和尚挑水
2015-09-16 16:32
274 查看
#include<stdlib.h> #include<stdio.h> void backtrack(int n); /*函数功能:回朔求解第n天至第7天的解(即第n~7天分别安排和尚几)*/ struct st { int spare[8]; /*存储和尚的空闲时间,spare=0表示星期i没有空闲,spare=1表示星期i空闲,其中spare[0]不用*/ int flag; /*用于标记和尚周内是否已经工作过,flag=0表示没挑过水,flag=1表示已经挑过水*/ }monk[8]; int x[8],sum=0;/*sum用于统计共有多少种方案*/ int main (int argc, char **argv) { int i,j; for(i=1;i<=7;i++) {/*初始化和尚的空闲时间,初始化时和尚全部没挑过水即flag都为0*/ printf("请输入和尚%d的空闲时间:",i); for(j=1;j<=7;j++) { scanf("%d",&monk[i].spare[j]); } monk[i].flag=0; } backtrack(1); printf("共有%d种方案\n",sum); return 0; } void backtrack(int n) {/*函数功能:回朔求解第n天至第7天的解(即第n~7天分别安排和尚几)*/ int j; if(n>7) { sum++; printf("方案%d:\n",sum); for(j=1;j<=7;j++) { printf("星期%d和尚%d挑水\n",j,x[j]); } printf("\n"); } else { for(j=1;j<=7;j++) { //monk[j].flag=0; x =j; //x 代表第n天是和尚j挑水 if(monk[j].flag==0&&monk[j].spare ==1) {//判断和尚j是否已经挑过水及和尚星期n是否有空 monk[j].flag=1; backtrack(n+1); monk[j].flag=0; } } } }
相关文章推荐
- org.dom4j.DocumentException: null Nested exception: null解决方法
- vim 编辑器的常见使用命令
- 用Axure来撰写互联网的产品需求文档(PRD)
- VB6.0和VB.Net的函数等对照表
- Zygote(app_process)相关分析2
- 对Java“一切皆对象”的理念的理解
- flex模拟监控数据的demo
- linux sed,awk详解
- redis操作
- `MQTTClient (~> 0.2.6)` required by `Podfile`
- 图片变形的抗锯齿处理方法
- 计划任务 执行sql脚本
- 使用selector修改TextView中字体的颜色
- iOS学习重要知识点整理01-Objective-C中@property的所有属性详解
- iOS开发之多线程入门 及NSThread
- 《程序员面试金典》二叉树平衡检查
- POJ 2240 Arbitrage
- poj2417 Baby-StepGiant-StepAlgorithm a^x=b%P
- 第三周-项目1-建立线性表
- 3.0新成员 -value,vector,map