一些算法模板DIJKSTRA 最大子序列和

(一)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);

                     }

              }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值