糯米

TI DaVinci, gstreamer, ffmpeg
随笔 - 167, 文章 - 0, 评论 - 47, 引用 - 0
数据加载中……

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;
}

posted on 2010-03-14 00:21 糯米 阅读(323) 评论(0)  编辑 收藏 引用 所属分类: POJ


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理