hdu 1142 A Walk Through the Forest Dijkstra

來源:互聯網
上載者:User

題目 http://acm.hdu.edu.cn/showproblem.php?pid=1142

剛開始拿著這個題目,但是不會做   我以為只是求最短路哦,沒想到還有深度搜尋   呵呵  在參考其他人代碼的情況下給搞出來的

首先我們來介紹一下題意   我理解為    起點是1  終點是2     在A到2 的道路上,你能計算幾條B到2的道路(距離比A到2 的道路要小)A,B是連結的。。

所以我們要求出所有點到 2 的距離,因為2是終點哦。所以我們先用Dijkstra來求出距離哦,在深度搜尋。。。。

 

#include<iostream>#include<cstring>using namespace std;int a[1002][1002],dp[1002],dis[1002];bool visit[1002];int n,m;#define INF 9999999int dfs(int v){    int i,temp,sum=0;    if(dp[v]!=-1)    return dp[v];    if(v==1)    return 1;    for(i=0;i<n;i++)    {        if(a[v][i]!=INF&&dis[v]>dis[i])   ///計算一共有幾條道路        {            temp=dfs(i);            sum+=temp;        }    }    dp[v]=sum;    return sum;}void Dijkstra(int v){    int min,k;    memset(visit,false,sizeof(visit));  ///著色    for(int i=0;i<n;i++)    dis[i]=a[v][i];    dis[v]=0;    for(int i=0;i<n;i++)    {        min=INF;        for(int j=0;j<n;j++)        {            if(!visit[j]&&dis[j]<min) ///找出最短的邊            {                min=dis[j];                k=j;            }        }        visit[k]=true;        for(int j=0;j<n;j++)        {            if(!visit[j]&&dis[k]+a[k][j]<dis[j])///更新沒一條邊距離            {                dis[j]=dis[k]+a[k][j];            }        }    }}int main(){    int i,j,k;    while(cin>>n,n)    {        for(i=0;i<n;i++)       {           dp[i]=-1;           for(j=0;j<n;j++)           a[i][j]=INF;       }       cin>>m;        while(m--)        {            cin>>i>>j>>k;            i=i-1,j=j-1;  ///注意我是從0開始的            if(a[i][j]>k)            a[i][j]=a[j][i]=k;        }        Dijkstra(1);        dfs(0);        cout<<dp[0]<<endl;    }    return 0;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.