 2005-07-01 21:02
	    2005-07-01 21:02
   2005-07-03 17:01
	    2005-07-03 17:01
  利用Dijkstra算法实现最短路径搜索 的程序中, 我怎么运行不出来呢? 电脑显示错误:f:\vc练习\lin.cpp(52) : error C2065: 'clrscr' : undeclared identifier f:\vc练习\lin.cpp(53) : error C2065: 'malloc' : undeclared identifier f:\vc练习\lin.cpp(68) : error C2065: 'getch' : undeclared identifier f:\vc练习\lin.cpp(68) : warning C4508: 'main' : function should return a value; 'void' return type assumed 执行 cl.exe 时出错.
lin.exe - 1 error(s), 0 warning(s)
[此贴子已经被作者于2005-10-12 17:31:01编辑过]
 2005-10-12 17:22
	    2005-10-12 17:22
   2006-11-06 20:10
	    2006-11-06 20:10
   2006-11-07 16:06
	    2006-11-07 16:06
   2007-01-03 10:14
	    2007-01-03 10:14
  支持一下.
 2007-01-03 10:21
	    2007-01-03 10:21
  [CODE]#include "stdio.h"
#include "string.h"
#define MAXINT 0xfff
#define MAXSIZE 100
typedef struct
{
    char name[20];
    int value;
}infotype;
typedef struct ArcNode
{
    int weight;
    infotype *info;
}ArcNode;
typedef struct
{
    char v[MAXSIZE];
    ArcNode arc[MAXSIZE][MAXSIZE];
    int vertexnum,arcnum;
}Graph;
Graph g;
int Locate(char ch)
{
    int i;
    for(i=0;g.v[i]!=ch;i++);
    return i;
}
void Dijkstra(int posObt,int cost[])
{
    int i,j,w,sum,temp;
    bool set[MAXSIZE+1];
    memset(set,false,sizeof(set));
    for(i=0;i<g.vertexnum;i++)
    {
        cost[i]=g.arc[posObt][i].weight;
    }
    set[posObt]=true;
    for(i=0;i<g.vertexnum;i++)
    {
        temp=MAXINT;
        for(j=0;j<g.vertexnum;j++)
            if(set[j]==false&&cost[j]<temp)
            {
                temp=cost[j];
                w=j;
            }
        set[w]=true;
        for (j=0;j<g.vertexnum;j++)
            if (set[j]!=true)
                {
                    sum=cost[w]+g.arc[w][j].weight;
                    if (sum<cost[j])
                        cost[j]=sum;
                }
    }
}
int main(void)
{
    int i,j,pos_x,pos_y,posObt,wei;
    int cost[MAXSIZE+1];
    char start[2],end[2];
    char search;
    printf("Please input the number of the vertexs and the arcs:\n");
    do{
          scanf("%d%d",&g.vertexnum,&g.arcnum);
          if(g.vertexnum>100)
              printf("The number is too large.Please input a smaller number:\n");
      }while(g.vertexnum>100);
    for(i=0;i<g.vertexnum;i++)
        for(j=0;j<g.vertexnum;j++)
        {
            g.arc[i][j].weight=MAXINT;
            g.arc[i][j].info=NULL;
        }
    printf("Now input the vertex:\n");
    fflush(stdin);
    for(i=0;i<g.vertexnum;i++)
        g.v[i]=getchar();
    printf("Now input the arcs:(for example:a b 10)\n");
    for(i=0;i<g.arcnum;i++)
    {
        scanf("%s%s%d",start,end,&wei);
        pos_x=Locate(start[0]);
        pos_y=Locate(end[0]);
        g.arc[pos_x][pos_y].weight=wei;
    }
    fflush(stdin);
    printf("Now input the vertex you want to search its minimal path to other vertexs:\n");
    search=getchar();
    posObt=Locate(search);
    Dijkstra(posObt,cost);
    for(i=0;i<g.vertexnum;i++)
        if(i!=posObt)
        {
            printf("%c->%c:%d\n",g.v[posObt],g.v[i],cost[i]);
        }
    return 0;
}[/CODE]
floyd算法虽然算的是全源最短路径,但写起来就更简单了,就不详细写了,
只写个大概:
void   Floyd(Fl[][],Edge[][],n)
{   for ( i = 1; i <= n; i++ )
          for ( j = 1; j<=n; j++ )
                Fl[i][j] = Edge[i][j] ;
     for ( k = 1; k <= n; k++ )
           for ( i = 1; i <= n; i++ )
                 for ( j = 1; j <=n; j++ )
                       if ( Fl[i][k] + Fl[k][j] < Fl[i][j] )
                             Fl[i][j] = Fl[i][k] + Fl[k][j] ;
}

 2007-01-03 12:58
	    2007-01-03 12:58
   2007-06-06 19:29
	    2007-06-06 19:29
   ie le
ie le  										
					
	 2007-06-16 20:34
	    2007-06-16 20:34