算法导论-C++实现-all pairs shortest paths-matrix multiplication算法

本文介绍了一种基于迭代的最短路径算法实现方法,通过定义矩阵大小、初始化权重矩阵及路径矩阵,逐步扩展路径来计算所有节点对之间的最短路径。最终展示了从节点0到节点1的最短路径。

#include <iostream>
using namespace std;
#define matricsRow 100
int infinite=1000;
int nullValue=-1;
int **pi;
int **d;
int **W;
int ***L;
void extendShortestPaths(int ii,int n){

int **C=new int*[matricsRow];
for(int i=0;i<matricsRow;i++)
C[i]=new int[matricsRow];

for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
C[i][j]=infinite;
for(int k=0;k<n;k++){
if(C[i][j]>L[ii][i][k]+W[k][j])
C[i][j]=L[ii][i][k]+W[k][j];
}
}
}
L[ii]=C;
}
void slowAllPairsShortestPaths(int n){
L[0]=W;
for(int i=1;i<n-1;i++){
extendShortestPaths(i-1,n);
}
}
void printAllPairsShortestPath(int i,int j){
if(i==j){
cout<<i;
}
else if (pi[i][j]==nullValue){
cout<<endl;
cout<<"no path from "<<i<<" to "<<j<<" exists"<<endl;
}
else{
printAllPairsShortestPath(pi,i,pi[i][j]);
cout<<j;
}
}
void initialize(){
pi=new int*[matricsRow];
d=new int*[matricsRow];
W=new int*[matricsRow];
L=new int**[matricsRow];
for(int i=0;i<matricsRow;i++){
pi[i]=new int[matricsRow];
d[i]=new int[matricsRow];
W[i]=new int[matricsRow];
L[i]=new int*[matricsRow];
for(int j=0;j<matricsRow;j++){
L[i][j]=new int[matricsRow];
}
}
for(int i=0;i<matricsRow;i++){
for(int j=0;j<matricsRow;j++){
// cout<<i<<":"<<j<<endl;
pi[i][j]=nullValue;
W[i][j]=infinite;
}
}
cout<<"initialization of W values finished"<<endl;
W[0][0]=0;
W[1][1]=0;
W[2][2]=0;
W[3][3]=0;
W[4][4]=0;
W[0][1]=3;
W[0][2]=8;
W[0][4]=-4;
W[1][3]=1;
W[1][4]=7;
W[2][1]=4;
W[3][0]=2;
W[3][2]=-5;
W[4][3]=6;
cout<<"initialize finished"<<endl;
}
int main(){
cout<<"program begins"<<endl;
initialize();
slowAllPairsShortestPaths(5);
printAllPairsShortestPath(0,1);
return 0;
}

Practice 1 Date: Monday, March 18th, 2013 We highly encourage being environment friendly and trying all problems on your own. Implement exercise 2.3-7. Implement priority queue. Implement Quicksort and answer the following questions. (1) How many comparisons will Quicksort do on a list of n elements that all have the same value? (2) What are the maximum and minimum number of comparisons will Quicksort do on a list of n elements, give an instance for maximum and minimum case respectively. Give a divide and conquer algorithm for the following problem: you are given two sorted lists of size m and n, and are allowed unit time access to the ith element of each list. Give an O(lg m + lgn) time algorithm for computing the kth largest element in the union of the two lists. (For simplicity, you can assume that the elements of the two lists are distinct). Practice 2 Date: Monday, April 1st, 2013 We highly encourage being environment friendly and trying all problems on your own. Matrix-chain product. The following are some instances. Longest Common Subsequence (LCS). The following are some instances. X: xzyzzyx Y: zxyyzxz X:MAEEEVAKLEKHLMLLRQEYVKLQKKLAETEKRCALLAAQANKESSSESFISRLLAIVAD Y:MAEEEVAKLEKHLMLLRQEYVKLQKKLAETEKRCTLLAAQANKENSNESFISRLLAIVAG Longest Common Substring. The following are some instances. X: xzyzzyx Y: zxyyzxz X:MAEEEVAKLEKHLMLLRQEYVKLQKKLAETEKRCALLAAQANKESSSESFISRLLAIVAD Y:MAEEEVAKLEKHLMLLRQEYVKLQKKLAETEKRCTLLAAQANKENSNESFISRLLAIVAG Max Sum. The following is an instance. (-2,11,-4,13,-5,-2) Shortest path in multistage graphs. Find the shortest path from 0 to 15 for the following graph.   A multistage graph is a graph (1) G=(V,E) with V partitioned into K >= 2 disjoint subsets such that if (a,b) is in E, then a is in Vi , and b is in Vi+1 for some subsets in the partition; and (2) | V1 | = | VK | = 1.     Practice 3 Date: Monday, April 15th, 2013 We highly encourage being environment friendly and trying all problems on your own. Knapsack Problem. There are 5 items that have a value and weight list below, the knapsack can contain at most 100 Lbs. Solve the problem both as fractional knapsack and 0/1 knapsack. A simple scheduling problem. We are given jobs j1, j2… jn, all with known running times t1, t2… tn, respectively. We have a single processor. What is the best way to schedule these jobs in order to minimize the average completion time. Assume that it is a nonpreemptive scheduling: once a job is started, it must run to completion. The following is an instance. (j1, j2, j3, j4) : (15,8,3,10) Single-source shortest paths. The following is the adjacency matrix, vertex A is the source.  A B C D E A -1 3 B 3 2 2 C D 1 5 E -3 All-pairs shortest paths. The adjacency matrix is as same as that of problem 3.(Use Floyd or Johnson’s algorithm)     Practice 4 Date: Monday, May 8th, 2013 We highly encourage being environment friendly and trying all problems on your own. 0/1 Knapsack Problem. There are 5 items that have a value and weight list below, the knapsack can contain at most 100 Lbs. Solve the problem using back-tracking algorithm and try to draw the tree generated. Solve the 8-Queen problem using back-tracking algorithm.    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值