具體題目詳見《演算法導論》第15章 動態規劃
/*
*利用動態規劃解決裝配線排程問題
*配置檔案名稱是 stationinfo.txt
*第一行為進入兩條線各花費的時間
*第二行為離開兩條線個花費的時間
*接下來六行為第一條線每個站點停留時間、每個站點到本線下一站點時間、每個站點到另一條線下乙個站點時間
*最後六行為第二條線的每個站點資訊
* ** author: storymonster
*last change date: 2016/5/25
*/#include
#include
#define finish_load 7
typedef
struct loadstation
loadstation;
loadstation line1_sta[6] = ,line2_sta[6] = ;
int e1 = 0,e2 = 0; //e1 e2分別表示底盤進入裝載線要花費的時間
int x1 = 0,x2 = 0; //x1 x2分別表示汽車離開裝載線要花費的時間,在本**中認為每條線的第六個站切換到令一條線的時間等於從該線上退出的時間,即x1 == line1_sta[5].moveotherlinenextstatime
int line1_time[6] = ;
int line2_time[6] = ;
int line1_path[6] = ;
int line2_path[6] = ;
static
bool loadconfigfile(); //讀取配置檔案
static
void showconfiginfo(); //展示各站點配置情況
static
int gettheshortesttime(int staindex); //獲取到sta的最短時間,並展示路徑
static
void creattimeandpathtable(int staindex); //生成每個站點的最短時間表和最短路徑表
void creattimeandpathtable(int staindex)
}//純遞迴獲取最小的時間,書上不建議用這種方式,因為節點數非常大的時候這種方式花費的時間成本太高
//所以我寫在這裡只為一樂
int gettheshortesttime(int staindex,int lineindex)
int time1 = 0, time2 = 0; //time1 第一條線上到上乙個節點的最短時間 time2 第二條線上到上乙個節點的最短時間
if(staindex == finish_load)
else
else
}return (time1bool loadconfigfile()
if(line == 1)
if(line < 8)
fscanf(fp,"%d %d %d",&line2_sta[j].selfloadtime,&line2_sta[j].movenextstatime,&line2_sta[j].moveotherlinenextstatime);
j++;
}fclose(fp);
fp = null;
return
true;
}void showconfiginfo(void)
std::cout
<< "stations in line2(left: load time middle: move to this line next station time right: move to line1 time):"
}int main()
//showconfiginfo();
creattimeandpathtable(6);
int time1 = line1_time[5]+x1;
int time2 = line2_time[5]+x2;
std::cout
<<"the shortest time:"
<< ((time1std::endl;
std::cout
<< "the best path:"
return
0;}
動態規劃 裝配線排程問題
這個問題是在演算法導論的動態規劃章節有提到,由於問題敘述起來太繁雜就直接省略。命名規則與書上的偽 是一致的,只是用c 具體語言實現了而已。動態規劃問題 裝配線排程問題 pragma once class asl include alspro.h include include using names...
裝配線問題 動態規劃
裝配線問題 public class forth,通過裝配線上每個站所需時間 int b newint 一條裝配線上的 i 站到另一條裝配線上的 i 1 站所需的時間 int g newint 開始進入裝配線所需的時間 int e newint 出裝配線所需的時間 int dp newint 2 6...
演算法分析 動態規劃 裝配線排程
前言 動態規劃的概念 動態規劃 dynamic programming 是通過組合子問題的解而解決整個問題的。分治演算法是指將問題劃分為一些獨立的子問題,遞迴的求解各個問題,然後合併子問題的解而得到原問題的解。例如歸併排序,快速排序都是採用分治演算法思想。本書在第二章介紹歸併排序時,詳細介紹了分治演...