程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> PAT1030-Travel Plan

PAT1030-Travel Plan

編輯:C++入門知識

C語言源碼: [cpp]   #include<stdio.h>   #include<limits.h>   typedef struct node   {       int length,cost;   }node;   node A[600][600];   int visited[600];   node T[600];   int Stack[600][600];   int top[600];   int main()   {       int n,m,i,j,s,t,a,b,length,cost,minlength,mincost,fmin,k;       scanf("%d %d %d %d",&n,&m,&s,&t);       for(i=0;i<n;i++)       {           for(j=0;j<n;j++)               A[i][j].length=INT_MAX;           visited[i]=0;           T[i].length=INT_MAX;           T[i].cost=INT_MAX;           top[i]=0;       }       for(i=0;i<m;i++)       {           scanf("%d %d %d %d",&a,&b,&length,&cost);           if(length<A[a][b].length||(length==A[a][b].length&&cost<A[a][b].cost))           {               A[a][b].length=length;               A[a][b].cost=cost;           }           A[b][a].length=A[a][b].length;           A[b][a].cost=A[a][b].cost;       }       visited[s]=1;       T[s].length=0;       T[s].cost=0;       i=s;       top[s]=1;       Stack[s][0]=s;       while(i!=t)       {           for(j=0;j<n;j++)           {               if(visited[j]==0)               {                   if(A[i][j].length!=INT_MAX)                   {                       if(T[i].length+A[i][j].length<T[j].length||(T[i].length+A[i][j].length==T[j].length&&T[i].cost+A[i][j].cost<T[j].cost))                       {                           T[j].length=T[i].length+A[i][j].length;                           T[j].cost=T[i].cost+A[i][j].cost;                           top[j]=top[i];                           for(k=0;k<top[i];k++)                               Stack[j][k]=Stack[i][k];                       }                   }               }           }           minlength=INT_MAX;           mincost=INT_MAX;           for(j=0;j<n;j++)           {               if(visited[j]==0&&(T[j].length<minlength||(T[j].length==minlength&&T[j].cost<mincost)))               {                   fmin=j;                   minlength=T[j].length;                   mincost=T[j].cost;               }           }           visited[fmin]=1;           Stack[fmin][top[fmin]++]=fmin;           i=fmin;       }       for(i=0;i<top[t];i++)           printf("%d ",Stack[t][i]);       printf("%d %d\n",T[t].length,T[t].cost);       return 0;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved