(一)DIJKSTRA求単源最短路径:
Memset
void Dijkstra(int st,int n){
for(int i=1;i<=n;i++)
{
tem[i]=map[st][i];
// cout<<"map[st][i]="<<map[st][i]<<" " ;
}
cout<<endl;
for(int i=1;i<=n;i++)
{
int min=inf;intminj=inf;
for(intj=1;j<=n;j++)
{
if(min>tem[j]&&vis[j]==false)
{
min=tem[j];
minj=j;
}
// cout<<min<<" "<<j<<endl;
}
// cout<<endl;
d[minj]=min;
vis[minj]=true;
for(intj=1;j<=n;j++)
{
if(!vis[j])
{
tem[j]=minn(tem[j],d[minj]+map[minj][j]);
}
}
}
}
(二)Floyd求最短路径:
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(e[i][k]<inf && e[k][j]<inf && e[i][j]>e[i][k]+e[k][j])
e[i][j]=e[i][k]+e[k][j];
(三)最大子序列和
for(inti=0;i<m;i++){
tem_num=tem_num+num[i];
if(tem_num>max){
max=tem_num;
marki=cont;
markj=i;
}
elseif(tem_num<0){
tem_num=0;
cont=(i+1);
}
}
求単源最短路径:Memset
void Dijkstra(int st,int n){
for(int i=1;i<=n;i++)
{
tem[i]=map[st][i];
// cout<<"map[st][i]="<<map[st][i]<<" " ;
}
cout<<endl;
for(int i=1;i<=n;i++)
{
int min=inf;intminj=inf;
for(intj=1;j<=n;j++)
{
if(min>tem[j]&&vis[j]==false)
{
min=tem[j];
minj=j;
}
// cout<<min<<" "<<j<<endl;
}
// cout<<endl;
d[minj]=min;
vis[minj]=true;
for(intj=1;j<=n;j++)
{
if(!vis[j])
{
tem[j]=minn(tem[j],d[minj]+map[minj][j]);
}
}
}
}
(二)Floyd求最短路径:
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(e[i][k]<inf && e[k][j]<inf && e[i][j]>e[i][k]+e[k][j])
e[i][j]=e[i][k]+e[k][j];
(三)最大子序列和
for(inti=0;i<m;i++){
tem_num=tem_num+num[i];
if(tem_num>max){
max=tem_num;
marki=cont;
markj=i;
}
elseif(tem_num<0){
tem_num=0;
cont=(i+1);
}
}