一个c++的动态规划算法
来源:互联网 发布:2017网络理财黑名单 编辑:程序博客网 时间:2024/04/29 11:27
main.cpp
实现动态规划,最短路径。
main.cpp
#include <iostream>#include <fstream>#include <string>#include <vector>#include <algorithm>#include <map>#include <set>#include <cmath>#include <inttypes.h>#include <boost/lexical_cast.hpp>#include <boost/algorithm/string.hpp>#include "Matrix615.h"using namespace std;void usage(){cout << " Dynamic-MTP <input.matrix> " << endl;exit(0);}int main(int argc,char **argv){int nrow = 5;int ncol = 5;if (argc < 2) {usage();}string matrix_file = argv[optind++];Matrix615<int> hw(nrow,ncol-1),vw(nrow-1,ncol);// initiate 2 matrixes with all zeroLoad_matrix(matrix_file,hw,vw,nrow,ncol);Matrix615<int> cost(nrow,ncol),move(nrow,ncol);int optCost = optimalCost(hw,vw,cost,move,nrow-1,ncol-1);cout << "Optimal Cost is " << optCost << endl;return 0;}
Matrix615.h
#ifndef MATRIX651_H#define MATRIX651_H#include <iostream>#include <fstream>#include <string>#include <vector>#include <algorithm>#include <map>#include <set>#include <cmath>#include <inttypes.h>#include <boost/lexical_cast.hpp>#include <boost/algorithm/string.hpp>template<class T>class Matrix615{public:std::vector<std::vector <T> > data;Matrix615(int nrow,int ncol,T val = 0){data.resize(nrow);for (int i=0;i<nrow;++i){data[i].resize(ncol,val);}}int rowNums(){return (int)data.size();}int colNums(){return (data.size() == 0) ? 0 : (int)data[0].size();}};int optimalCost(Matrix615<int>& hw,Matrix615<int>& vw,Matrix615<int>& cost,Matrix615<int>& move,int r,int c);void Load_matrix(std::string &matrix_file, Matrix615<int> &hw, Matrix615<int> &vw, int nrow, int ncol);#endif
MTP.cpp
#include "Matrix615.h"using namespace std;int optimalCost(Matrix615<int>& hw,Matrix615<int>& vw,Matrix615<int>& cost,Matrix615<int>& move,int r,int c){if (cost.data[r][c] == 0){if ( (r==0) && (c==0) ){cost.data[r][c] = 0;}else if (r==0){move.data[r][c] = 0;// I am in first row, only because I moved left before this stepcost.data[r][c] = optimalCost(hw,vw,cost,move,r,c-1) + hw.data[r][c-1];}else if (c==0){move.data[r][c] = 1;// I am in first col, only because I moved down before this stepcost.data[r][c] = optimalCost(hw,vw,cost,move,r-1,c) + hw.data[r-1][c];}else{int hcost = optimalCost(hw,vw,cost,move,r,c-1) + hw.data[r][c-1];int vcost = optimalCost(hw,vw,cost,move,r-1,c) + hw.data[r-1][c];if (hcost > vcost){cost.data[r][c] = vcost;move.data[r][c] = 1;}else {cost.data[r][c] = hcost;move.data[r][c] = 0;}}}return cost.data[r][c];}void Load_matrix(string &matrix_file,Matrix615<int> &hw, Matrix615<int> &vw, int nrow, int ncol){ifstreaminfile; infile.open(matrix_file.c_str());if (! infile ){cerr << "fail to open input file " << matrix_file << endl;exit(0);}string lineStr;while (getline(infile,lineStr,'\n')){if (lineStr[0] == '\n' || lineStr[0] == ' ' || lineStr[0] == '\t'){continue;}if (lineStr[0] == '#'){vector<string> lineVec;boost::split(lineVec,lineStr, boost::is_any_of(":, \t\n"), boost::token_compress_on);if (lineVec[0] == "#hw"){int __row_n = 0;getline(infile,lineStr,'\n');while (getline(infile,lineStr,'\n')){vector<string> f;boost::split(f,lineStr, boost::is_any_of(":, \t\n"), boost::token_compress_on);if (lineStr[0] == ' ' || lineStr[0] == '\n' || f[0] == "S\\S"){continue;}for (int __col_n=1; __col_n<f.size();++__col_n){hw.data[__row_n][__col_n-1] = boost::lexical_cast<int>(f[__col_n]);}++__row_n;if (__row_n > nrow - 1){break;}}}if (lineVec[0] == "#vw"){int __row_n = 0;getline(infile,lineStr,'\n');while (getline(infile,lineStr,'\n')){vector<string> f;boost::split(f,lineStr, boost::is_any_of(":, \t\n"), boost::token_compress_on);if (lineStr[0] == ' ' || lineStr[0] == '\n' || f[0] == "S\\S"){continue;}for (int __col_n=1; __col_n<f.size();++__col_n){vw.data[__row_n][__col_n-1] = boost::lexical_cast<int>(f[__col_n]);}++__row_n;if (__row_n > nrow - 2){break;}}}}}infile.close();}
cc=g++exe=Dynamic-MTPobj=main.o MTP.o$(exe):$(obj)$(cc) -o $(exe) $(obj)main.o:main.cpp Matrix615.h$(cc) -c main.cppMTP.o:MTP.cpp Matrix615.h$(cc) -c MTP.cppclean:rm -rf *.o $(exe)
0 0
- 一个c++的动态规划算法
- [算法]很特别的一个动态规划入门教程
- 动态规划——一个神奇的算法类
- 强化学习:动态规划算法实现一个简单的示例
- 动态规划算法应用于一个实际问题
- 动态规划的一个例子
- TSP的动态规划算法
- 应用动态规划的算法
- 动态规划算法的理解
- LCS的动态规划算法
- 动态规划算法的运用
- 动态规划算法的基本要素
- 动态规划 01背包 c算法
- 动态规划_动态规划算法的优化技巧
- [算法]背包问题的动态规划算法解答,C语言实现
- 算法--动态规划算法
- 几个经典的动态规划的算法
- 动态规划系列之一 引言 :由一个问题引出的算法
- 使用AngularJS构建大型Web应用
- asp+Jmail+FTP服务器
- 批处理 屏幕 定时截图 循环 键 PrintScreen 第三方工具 nircmd
- 10个简单有效的方法帮你改善jQuery代码与性能
- Evaluate Reverse Polish Notation
- 一个c++的动态规划算法
- 完美解决SAMSUNG Mobile USB CDC Composite Device安装失败 三星手机USB驱动失败。
- installshield 4075 错误
- 网站运营推广细节篇:标题优化中级策略
- 2014企业网站的优化方向
- 新建医疗网站应该怎样做好网站SEO优化
- 不够慷慨,也要芳香四溢
- 赠人玫瑰,手有余香
- 11g RAC 重启顺序