静态多路径分配模型程序源代码(C++程序)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
静态多路径分配模型程序源代码
#include
#include
#include
const int maxnum=100;
const double maxint=99999;
double dist1[maxnum],dist2[maxnum];
int prev1[maxnum],prev2[maxnum];
double c[maxnum][maxnum];
double b[maxnum][maxnum],w[maxnum][maxnum];
float v[maxnum][maxnum];
int n,line,r,s,Q;
void Dijkstra(int n,int v,double *dist,int *prev,double c[maxnum][maxnum]) {
bool s[maxnum];
for(int i=1;i<=n;++i)
{
dist[i]=c[v][i];
s[i]=0;
if(dist[i]==maxint)
prev[i]=0;
else
prev[i]=v;
}
dist[v]=0;
s[v]=1;
for(i=2;i<=n;++i)
{
double tmp=maxint;
int u=v;
for(int j=1;j<=n;++j)
if((!s[j])&&dist[j] { u=j; tmp=dist[j]; } s[u]=1; for(j=1;j<=n;++j) if((!s[j])&&c[u][j] { double newdist=dist[u]+c[u][j]; if(newdist { dist[j]=newdist; prev[j]=u; } } } } void searchPath(int *prev,int v,int u) { int que[maxnum]; int tot=1; que[tot]=u; tot++; int tmp=prev[u]; while(tmp!=v) { que[tot]=tmp; tot++; tmp=prev[tmp]; } que[tot]=v; for(int i=tot;i>=1;--i) if(i != 1) cout< else cout< } void siranzhi(int n,double *dist1,double *dist2,double c[maxnum][maxnum],double b[maxnum][maxnum]) { for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) if(c[i][j]!=maxint) if(dist1[i] b[i][j]=exp((dist1[j]-dist1[i]-c[i][j])); else b[i][j]=0; for(i=1;i<=n;++i) for(int j=1;j<=n;++j) if(c[i][j]!=maxint) if((dist1[i]>=dist1[j]||dist2[i]<=dist2[j])&&b[j][i]>0) b[i][j]=maxint; } void quanzhong(int n,double *dist,int r,double b[maxnum][maxnum],double w[maxnum][maxnum]) { bool t[maxnum]; for(int i=1;i<=n;++i) t[i]=0; for(int m=1;m { int u=r; double tmp=maxint; for(int j=1;j<=n;++j) { if((t[j]==0)&&(dist[j] { u=j; tmp=dist[j]; } } t[u]=1; j=1; while(j<=9) { if(b[u][j]!=maxint) { if(u==r) { w[u][j]=b[u][j]; } else { double x=0; for(i=1;i<=n;++i) { if((w[i][u]!=maxint)&&(b[i][u]!=maxint)) { x+=w[i][u]; } } w[u][j]=b[u][j]*x; } } j++; } }