dijkstra算法典型题

//toj1778--dijkstra加上dp
#include
#include
#define INF 0xfffffff
#define MAX 105
using namespace std;
int flag[MAX],map[MAX][MAX],dist[MAX],dp[MAX];
int i,j,n;
void dijkstra(int s)
{
   memset(flag,0,sizeof(flag));           
   for(i=1;i<=n;i++)
      if(map[s][i]!=0)
          dist[i]=map[s][i];
      else dist[i]=INF;
   dist[s]=0;
   flag[s]=1;
   for(i=1;idist[s]+map[s][j]&&map[s][j]!=0)  
               dist[j]=dist[s]+map[s][j];                                        
   }             
}
int dfs(int u)
{
    if(dp[u]!=-1)return dp[u];
    dp[u]=0;
    for(int i=1;i<=n;i++)
       if(map[u][i]!=0&&dist[i]>n)
   {
      if(n==0)break;
      memset(map,0,sizeof(map));
      //初始化dp
      memset(dp,-1,sizeof(dp)); 
      cin>>m;
      for(i=0;i>a>>b>>c;
          map[a][b]=map[b][a]=c;                
      } 
      dijkstra(2);
      //dfs
      dp[2]=1;
      dfs(1);
      cout<
//toj 2870 the k-th city
#include
#define MAX 202
#define INF 0xfffffff//16进制的无符号数0xfffffff是最大的int(整数)
using namespace std;

int map[MAX][MAX];
int dijkstra(int n,int s,int k)
{
    int i,j,dist[MAX],flag[MAX];
    for (i=0;idist[j])
            {
                min=dist[j];
                tmp=j;
            }
        flag[tmp]=1; 
        if(i==k)return tmp;
        for(j=0;jmap[tmp][j]+dist[tmp])
               dist[j]=map[tmp][j]+dist[tmp];                                    
    }      
}
int main()
{
    int i,j,a,b,c,m,n,k;
    while(cin>>n)
    {
       if(n==0)break;
       cin>>m;
       for(i=0;i>a>>b>>c;
          map[a][b]=map[b][a]=c;
       }
       cin>>k;
       cout<



你可能感兴趣的:(acm,图论)