惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
博客园_首页
博客园 - 聂微东
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
The Cloudflare Blog
aimingoo的专栏
aimingoo的专栏
Martin Fowler
Martin Fowler
D
Docker
人人都是产品经理
人人都是产品经理
WordPress大学
WordPress大学
博客园 - 三生石上(FineUI控件)
Microsoft Azure Blog
Microsoft Azure Blog
Recent Announcements
Recent Announcements
Apple Machine Learning Research
Apple Machine Learning Research
阮一峰的网络日志
阮一峰的网络日志
B
Blog RSS Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Microsoft Security Blog
Microsoft Security Blog
L
LangChain Blog
Jina AI
Jina AI
博客园 - Franky
D
DataBreaches.Net

博客园 - 张尹

Windows管道技术简述 内核printf源代码分析 获得控制台程序的输出 如何在控制台程序中读取WORD文档的内容? - 张尹 - 博客园 简单封装的一个彩色进度条 C语言编程技巧汇萃(包含大量实用函数) 一个编程函数集(包含大量C实用函数) MD5算法说明及源码 C51 怎样将1个子程序段定位在1个固定的地址位置? 动态真彩工具栏 一个实用的 CToolBar 扩展类 CToolBarEx 一步步制作真彩工具条 [转载精品]C++程序员经常问的11个问题 关于CRichEditCtrl中文字颜色的控制 如何制作Windows自定义边框的对话框 MFC下窗口分割和文字输出的实现 让ListBox控件支持拖动 VC通用控件编程之CSlider控件 CListCtrl使用详解
一个不错的算法
张尹 · 2006-12-31 · via 博客园 - 张尹

#define INF 32767
#define max 10
void dispath(int dist[max],int path[max],int s[max],int n,int v0)
  {
    int i,k;
    for(i=0;i<n;i++)
    {
      if(s[i]==1)
      {
 k=i;
 printf("%d reach %d the least distance is:",v0,i);
 while(k!=v0)
 {
   printf("%d -",k);
   k=path[k];
 }
 printf("%d ",k);
 printf("%d",dist[i]);
      }
      else
 printf("not exist luji");
    }
  }
void dijkstra(int cost[max][max],int n,int v0)
{
  int i,j,u,kao;
  int dist[max];
  int s[max];
  int path[max];
  for(i=0;i<n;i++)
  {
    s[i]=0;
    dist[i]=cost[v0][i];
    if(cost[v0][i]<INF)
     path[i]=v0;
    else
     path[i]=-1;
  }
  s[v0]=1;
  path[v0]=v0;
  for(i=1;i<=n;i++)
  {
    kao=INF;
    u=0;
    for(j=0;j<n;j++)
      if((s[j]==0)&&(dist[j]<kao))
      {
 u=j;
 kao=dist[j];
      }

    s[u]=1;
    for(j=0;j<n;j++)
     if((s[j]==0)&&(cost[u][j]<INF))
       if((dist[u]+cost[u][j])<dist[j])
  dist[j]=dist[u]+cost[u][j];

  }
  }

main()
{
  int i,j,n,v0;
  int cost[max][max];
  printf("please input n:");
  n=scanf("%d",&i);
  printf("please input v0:");
  v0=scanf("%d",&i);
  for(i=0;i<n;i++)
   for(j=0;j<n;j++)
     scanf("%d",&cost[i][j]);
  dijkstra(cost,n,v0);

}