Tuesday, June 8, 2010

This is the correct dijstra's algorithm. I just figured it out.

#include
using namespace std;

int main()
{
    FILE *fin;
    FILE *fout;
    fin=fopen("dij.in","r");
    fout=fopen("dij.out","w");
    int size,tot=0,index;
    fscanf(fin,"%d",&size);
    int man[size][size];
    int vis[size];
    int dis[size];
    int row,col,wei;
    int min=0,plus=0;
    for (int i=0;i
    {
        vis[i]=0;
        dis[i]=1000;
        for(int j=0;j
        man[i][j]=1000;
    }
    int sv=0;
    index=0;
    dis[0]=0;
    while(fscanf(fin,"%d %d %d",&row,&col,&wei) && !feof(fin))
    {
        man[row][col]=wei;
    }
    for (int i=index;tot!=size-1;i++)
    {  
        i=index;
        vis[index]=1;  
        min=1000;
        for(int j=0;j
        {
            if(man[i][j]
            {
                min=man[i][j];
                index=j;
            }
        }
        printf("plus is: %d,min is %d\n",plus,min);
        for(int j=0;j
        {
            if(man[i][j]<1000)
            {
                if(vis[j]==0 && dis[j]>man[i][j]+plus)
                {
                    dis[j]=man[i][j]+plus;
                }
            }
        }
        plus=plus+min;
        tot=tot+1;
    }
    for(int v=0;v
    {
        fprintf(fout,"%d  ",dis[v]);
    }
return 0;
}

No comments:

Post a Comment