四人过桥问题
来源:互联网 发布:python中readline函数 编辑:程序博客网 时间:2024/05/01 02:54
问题:四人夜过桥,步行时间分别为 1、2、5、10 分钟,四人只有一台手电筒,一趟最多两人过桥,一趟过桥须持手电筒,时间以最慢者计,问 17 分钟内可否过桥,如何过桥?
#include <iostream>using namespace std;const int n = 4; //4个人const int size = 64;int position[n]; //表示每个人的状态 1为已经过桥 0为未过桥int index, tmpscheme[size]; //tmpscheme临时时间方案 int mintime = 1000;//最少时间初始值int time[n] = { 1, 2, 5, 10 }; //每个人过桥时间int c;//remainder表示未过桥的人 curtime表示当前已经花的时间 direction表示方向 1为过桥方向 0为反方向void fn(int remainder, int curtime, int direction){if (remainder == 0){if (curtime == 17){int i = 0;for (; i+3 < c && tmpscheme[i] >= 0; i += 3)cout << time[tmpscheme[i]] << "-" << time[tmpscheme[i + 1]] << " " << time[tmpscheme[i + 2]] << " ";cout << time[tmpscheme[i]] << "-" << time[tmpscheme[i + 1]];cout << endl;}mintime = curtime;}else if (direction){for (int i = 0; i < n; ++i){if (!position[i] && curtime + time[i] <= mintime){c++;tmpscheme[index++] = i;position[i] = 1;for (int j = 0; j<n; ++j){int TmpMax = (time[i]>time[j] ? time[i] : time[j]);if (position[j] == 0 && curtime + TmpMax<=mintime){c++;tmpscheme[index++] = j;position[j] = 1;fn(remainder - 2, curtime + TmpMax, !direction);position[j] = 0;c--;tmpscheme[--index] = -1;}}position[i] = 0;c--;tmpscheme[--index] = -1;}}}else{for (int j = 0; j<n; j++){if (position[j] == 1 && curtime + time[j] <= mintime){c++;tmpscheme[index++] = j;position[j] = 0;fn(remainder + 1, curtime + time[j], !direction);position[j] = 1;c--;tmpscheme[--index] = -1;}}}}int main(){for (int i = 0; i<size; i++) // 初始方案内容为负值,避免和人员标号冲突tmpscheme[i] = -1;fn(n, 0, 1); // 查找最佳方案cout << "MinTime=:" << mintime << endl;return getchar();}
附上大神作品一篇 实在看不懂 留着以后看。
http://blog.csdn.net/hikaliv/article/details/4479956
0 0
- 四人过桥问题
- 四人过桥问题
- 【逻辑】四人过桥问题
- 师徒四人过桥问题
- php试题: 四人过桥问题
- 四人过桥问题的解法
- 四人过桥问题的解法
- [推理力] 四人过桥问题
- 四人过桥
- 现代谜题——四人过桥问题
- 关于微软面试题:"四人过桥"问题的思考——“n人过桥”问题的演进(Java实现)
- 关于微软面试题:"四人过桥"问题的思考——“n人过桥”问题的演进(Java实现)
- Dijkstra算法 ——四人过桥
- A、B、C、D四人过桥
- 同前面的ABCD四人过桥问题,用程序实现
- 过桥问题
- 过桥问题
- 过桥问题?
- 基于opencpu构建R语言的RESTful API
- 最基本的java连接数据库
- 获得一个视图的高度。OnGlobalLayoutListener获得一个视图的高度
- 【POJ 1222】EXTENDED LIGHTS OUT
- 如何方便地给Python环境注册新类库
- 四人过桥问题
- 原来 Delphi XE8 那个 “小贱样” 也是可以改的 ~
- 指针详解
- Spring MVC多视图配置(jsp, freemarker, Velocity)
- 01 [c语言][重要的知识点]printf函数和scanf函数的数据输出与读取问题
- 何谓作弊的SEO,作为正规的白帽SEO?
- windows消息机制详解
- Playback audio data from memory in windows
- hdu 1874 畅通工程续(最短路spfa)