国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

四種算法 Dijkstra bellman spfa Floyd 模版

2019-11-08 02:22:21
字體:
來源:轉載
供稿:網友
void Dijkstra(int v0)///求頂點到其他頂點的最短距離{    for(int i=0; i<n; i++)    {        dist[i]=Eage[v0][i];        vis[i]=0;///標記變量    }    vis[v0]=1;    dist[v0]=0;///將v0加入集合S    for(int i=0; i<n-1; i++) ///從頂點v0確定n-1條最短路徑    {        int min=INF,u=v0;        for(int j=0; j<n; j++)        {            if(!vis[j]&&dist[j]<min)            {                u=j;                min=dist[j];            }        }        vis[u]=1;        for(int k=0; k<n; k++)        {            if(!vis[k]&&Eage[u][k]<INF&&dist[k]>dist[u]+Eage[u][k])            {                dist[k]=dist[u]+Eage[u][k];            }        }    }}void bellman(int v0)///求頂點v0到其他頂點的最短距離{    for(int i= 0; i<n; i++) ///初始化    {        dist[i]=Eage[v0][i];    }    for(int k=1; k<n; k++) ///遞推n-1次    {        for(int u=0; u<n; u++) ///修改每個頂點的dist[u]        {            if(u!=v0)            {                for(int j=0; j<n; j++) ///找u的鄰接點                {                    if(Eage[j][u]<INF&&dist[u]>dist[j]+Eage[j][u])                    {                        dist[u]=dist[j]+Eage[j][u];///更新                    }                }            }        }    }}void spfa(int v0){    for(int i=0; i<n; i++) ///初始化    {        dist[i]=INF;        vis[i]=0;///標記是否在隊列里    }    queue<int >q;    while(!q.empty())q.pop();    dist[v0]=0;    vis[v0]=1;    q.push(v0);///起點入隊列    while(!q.empty())    {        int u=q.front();        q.pop();        vis[u]=0;        for(int i=0; i<n; i++)        {            if(i!=u&&Eage[u][i]<INF)///鄰接點            {                int v=i;                if(dist[v]<dist[u]+Eage[u][v])                {                    dist[v]=dist[u]+Eage[u][v];///更新                    if(!vis[v])///如果沒在隊列里                    {                        vis[v]=1;                        q.push(v);                    }                }            }        }    }}void Floyd(){    for(int i=0; i<n; i++)    {        for(int j=0; j<n; j++)        {            A[i][j]=Eage[i][j];        }    }    for(int k=0; k<n; k++)    {        for(int i=0; i<n; i++)        {            for(int j=0; j<n; j++)            {                if(k==i||k==j)continue;                if(A[i][k]+A[k][j]<A[i][j])                {                    A[i][j]=A[i][k]+A[k][j];                }            }        }    }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 姜堰市| 赤峰市| 施秉县| 定远县| 介休市| 潜山县| 崇州市| 如东县| 赣榆县| 报价| 千阳县| 育儿| 堆龙德庆县| 西乡县| 仁布县| 三亚市| 化州市| 夹江县| 左贡县| 恩施市| 泽库县| 浦城县| 武冈市| 泾阳县| 昭苏县| 昌图县| 江陵县| 平阳县| 长兴县| 伊宁市| 增城市| 深泽县| 油尖旺区| 刚察县| 怀集县| 金平| 辽源市| 蒙阴县| 衡山县| 罗山县| 瓦房店市|