zoukankan      html  css  js  c++  java
  • hdu1142 A Walk Through the Forest( Dijkstra算法+搜索)

    看到这道题,想起了我家旁边的山!


    那是一座叫做洪山寨的山,据说由当年洪秀全的小妾居住于此而得名!


    山上盛产野果(很美味)!

    好久没有爬上去了!

    #include<stdio.h>
    #include<string.h>
    #define MAX 100000000


    int map[1010][1010];
    int res[1010];
    int dist[1010];
    bool visited[1010];
    int n,m;


    void Dijkstra(int v)  
    {
    int i,tmp_index,tmp,j,k;
    for(i=1;i<=n;i++)
    {
    visited[i]=false;
    dist[i]=map[2][i];
    }
    visited[2]=true;
    dist[2]=0;
    for(i=2;i<=n;i++)
    {
    tmp=MAX;
    tmp_index=0;
    for(j=1;j<=n;j++)
    {
    if(!visited[j]&&dist[j]<tmp)
    {
    tmp=dist[j];
    tmp_index=j;
    }
    }
    visited[tmp_index]=true;
    for(k=1;k<=n;k++)
    {
    if(!visited[k]&&dist[k]>dist[tmp_index]+map[k][tmp_index])
    dist[k]=dist[tmp_index]+map[k][tmp_index];
    }
    }
    }


    int solve(int v)
    {
    int i;
    if(res[v]!=-1)
    return res[v];
    if(v==2)
    return 1;
    res[v]=0;
    for(i=1;i<=n;i++)
    if(map[i][v]!=MAX&&dist[i]<dist[v])
    res[v]+=solve(i);
    return res[v];
    }


    int main()
    {
    int i,a,b,c,j;
    while(scanf("%d",&n),n)
    {
    for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
    {
    if(i==j)
    map[i][j]=0;
    else
    map[i][j]=MAX;
    }
    scanf("%d",&m);
    while(m--)
    {
    scanf("%d%d%d",&a,&b,&c);
    map[a][b]=c;
    map[b][a]=c;
    }
    Dijkstra(2);
    memset(res,-1,sizeof(res));
    printf("%d ",solve(1));
    }
    return 0;
    }

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1142

  • 相关阅读:
    面向 例题
    面向
    mysql 储存过程
    php数组
    PHP 函数
    python 三大器
    python 第十一章 函数名+格式化+迭代器+递归
    python 第十章 动态参数+名称空间+嵌套+修改值
    python 第八章 r w a 等文件操作
    python 第七章 数据类型补充+遇到的坑+二次编码
  • 原文地址:https://www.cnblogs.com/aukle/p/3233690.html
Copyright © 2011-2022 走看看