1003. Emergency (25)

来源:互联网 发布:海通期货软件 编辑:程序博客网 时间:2024/06/08 11:49

#include<iostream>#include<climits>int map[500][500];int n1=0,dist1=INT_MAX,numb1,n;int visited[500]={0},num[500];void dfs(int c1,int c2,int dist,int numb){    if(c1==c2){        if(dist<dist1){            n1=1;            numb1=numb;            dist1=dist;            return;        }        if(dist==dist1){            n1++;            if(numb>numb1)                numb1=numb;            return;        }        if(dist>dist1)            return;    }    for(int i=0;i<n;i++){        if(map[c1][i]!=INT_MAX&&!visited[i]){            visited[i]=1;            dfs(i,c2,dist+map[c1][i],numb+num[i]);            visited[i]=0;        }    }}int main(){    using namespace std;    cin>>n;    int m,c1,c2;    cin>>m;    cin>>c1;    cin>>c2;    for(int i=0;i<n;i++){        cin>>num[i];    }    for(int i=0;i<500;i++)        for(int j=0;j<500;j++)            map[i][j]=INT_MAX;    for(int i=0,x,y,d;i<m;i++){        cin>>x;        cin>>y;        cin>>d;        if(d<map[x][y])           map[x][y]=map[y][x]=d;    }    dfs(c1,c2,0,num[c1]);    cout<<n1<<' '<<numb1;    return 0;}

第一次写博客,最近在刷PAT,之前都没怎么好好编过代码,算是从头开始吧,就想把自己的成长记录下来,加油吧!

自己动手来实现dfs和迪杰斯特拉算法还是 有一定难度的,花了很长时间来看别人代码,然后又自己写一遍,真的很菜,发现dfs也能求最短路径