POJ 2387 Til the Cows Come Home 单源最短路径

POJ 2387 Til the Cows Come Home 单源最短路径

用的SPFA算法。

#include  < stdio.h >
#include 
< stdlib.h >

#define  MAX_N 1024
#define  MAX_T 2048

struct  edge_node  {
    
int idx, len;
    
struct edge_node *next;
}
;
struct  edge_node edges[MAX_T  *   2 ],  * map[MAX_N];
int  N, T, D[MAX_N], queue[MAX_N], qh, qt, visited[MAX_N];

__inline 
void  add_edge( struct  edge_node  * e,  int  from,  int  to,  int  len)
{
    e
->idx = to;
    e
->len = len;
    e
->next = map[from];
    map[from] 
= e;
}


int  main()
{
    
int i, from, to, len;
    
struct edge_node *e;

    freopen(
"e:\\test\\in.txt""r", stdin);
        
    scanf(
"%d%d"&T, &N);
    
for (i = 0; i < T * 2; i += 2{
        scanf(
"%d%d%d"&from, &to, &len);
        add_edge(
&edges[i], from, to, len);
        add_edge(
&edges[i + 1], to, from, len);
    }

    
    
for (i = 1; i <= N; i++)
        D[i] 
= 0x00ffffff;

    queue[
0= N;
    visited[N] 
= 1;
    D[N] 
= 0;
    qh 
= 0;
    qt 
= 1;
    
while (qh != qt) {
        i 
= queue[qh++];
        qh 
&= _countof(queue) - 1;
        visited[i] 
= 0;
        
for (e = map[i]; e; e = e->next) {
            
if (D[i] + e->len < D[e->idx]) {
                D[e
->idx] = D[i] + e->len;
                
if (!visited[e->idx]) {
                    visited[e
->idx] = 1;
                    queue[qt
++= e->idx;
                    qt 
&= _countof(queue) - 1;
                }

            }

        }

    }

    printf(
"%d\n", D[1]);

    
return 0;
}

你可能感兴趣的:(POJ 2387 Til the Cows Come Home 单源最短路径)