dijkstra算法求图的最短路径

#include<iostream>
#include<stdlib.h>
using namespace std;
#define MAX 100
struct aisle
{
    int origin;
    int destination;
    int distance;
};
struct graph
{
    aisle *element;
    int dot;
    int brim;
};
void assignment(aisle &k,int origin,int destination,int distance)
{
    k.origin=origin;
    k.destination=destination;
    k.distance=distance;
}
void dijkstra(graph &k)
{
    int i,j,n;
    int t[k.dot];
    int distance_t=0;
    int a[k.dot][k.dot];
    for(i=0;i<k.dot;i++)
    {
        for(j=0;j<k.dot;j++)
        {
            a[i][j]=MAX;
        }
    }
    i=0;
    t[i]=1;
    while(t[i]!=k.dot)
    {
        for(j=0;j<k.dot;j++)
        {
            if(t[i]==k.element[j].origin)
            {
                if(i!=0)
                {
                    if(a[i][k.element[j].destination]<a[i][k.element[j].destination-1])
                    {
                        a[i][k.element[j].distance]=k.element[j].distance+distance_t;
                    }
                    else
                        a[i][k.element[j].destination]=a[i][k.element[j].destination-1];
                }
                else
                    a[i][k.element[j].distance]=k.element[j].distance;
            }
        }
        n=a[i][0];
        for(j=0;j<k.dot;j++)
        {
            if(n>a[i][j])
            {
                t[i++]=j+1;
                distance_t=a[i][j];
            }
        }
    }

    cout<<distance_t;
}
void print(aisle &k)
{
    cout<<'<';
    cout<<k.origin;
    cout<<',';
    cout<<k.destination;
    cout<<',';
    cout<<k.distance;
    cout<<'>'<<endl;
}
graph initgraph(int dot=4,int brim=4)
{
    int i;
    graph k;
    k.element=(aisle *)malloc(k.brim*(sizeof(aisle)));
    //***********输入*********************//
    /*
    for(i=0;i<k.brim;i++)
    {
        cin>>k.element[i].origin;
        cin>>k.element[i].destination;
        cin>>k.element[i].distance;
    }
    */
    assignment(k.element[0],1,2,1);
    assignment(k.element[1],1,3,3);
    assignment(k.element[2],2,4,4);
    assignment(k.element[3],3,4,2);
    k.brim=brim;
    k.dot=dot;
    return k;
}
int main()
{
    int dot;
    int brim;
    int i;
    graph k=initgraph();//dot与brim可以代入
    for(i=0;i<k.brim;i++)
    {
        print(k.element[i]);
    }
    dijkstra(k);
    return 0;
}
 

猜你喜欢

转载自blog.csdn.net/hrainning/article/details/86368784