hdu 1142

来源:互联网 发布:没什么用网络语怎么说 编辑:程序博客网 时间:2024/06/17 01:52
# include <iostream># include <string.h>using namespace std;# define N 1010# define INF 1000005int visit[N],map[N][N],d[N],p[N];void dij(int s,int n){int i,j,k;memset(visit,0,sizeof(visit));for(i=1;i<=n;i++)d[i]=map[i][s];visit[s]=1;d[s]=0;for(i=1;i<n;i++){int min = INF;for(j=1;j<=n;j++){if(!visit[j]&&d[j]<min){min=d[j];k=j;}}if(min==INF)break;visit[k]=1;d[k]=min;for(j=1;j<=n;j++){if(!visit[j]&&map[j][k]+d[k]<d[j])d[j]=map[j][k]+d[k];}}}int dfs(int s,int n){int i,sum=0;if(s==2) return 1;if(p[s]) return p[s];for(i=1;i<=n;i++){if(map[s][i]<INF&&d[s]>d[i])sum+=dfs(i,n);}p[s]=sum;return p[s];}int main (){int i,j,u,v,w,num,road;while(scanf("%d",&num)&&num){scanf("%d",&road);for(i=1;i<=num;i++){for(j=1;j<=num;j++){map[i][j]=INF;}}for(i=1;i<=road;i++){scanf("%d %d %d",&v,&u,&w);map[v][u]=map[u][v]=w;}dij(2,num);memset(p,0,sizeof(p));printf("%d\n",dfs(1,num));}return 0;}
Dijkstra  和dfs
0 0
原创粉丝点击