這是Dijkstra算法結構,我使用:(但是MAXV(這是頂點的最大數量是最大的,在500和每一個我試圖改變它的東西比這產生和錯誤更多的時間運行時)如何優化此dijkstra結構代碼?
- 我想用這種方式來表示有10000個頂點的圖,沒有人知道如何去優化它
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
using namespace std;
#define MAXV 500
#define MAXINT 99999
typedef struct{
int next;
int weight;
}edge;
typedef struct{
edge edges[MAXV][MAXV];
int nedges;
int nvertices;
int ndegree[MAXV];
}graph;
,這是我的Dijkstra代碼:
int dijkstra(graph *g,int start,int end){
int distance[MAXV];
bool intree[MAXV];
for(int i=0;i<=MAXV;++i){
intree[i]=false;
distance[i]=MAXINT;
}
int v=start;
distance[v]=0;
while(intree[v]==false){
intree[v]=true;
for(int i=0;i<g->ndegree[v];++i){
int cand=g->edges[v][i].next;
int weight=g->edges[v][i].weight;
if(distance[cand] > distance[v]+weight){
distance[cand] = distance[v]+weight;
}
}
int dist=MAXINT;
for(int i=0;i<g->nvertices;++i){
if((intree[i]==false) && (dist > distance[i])){
dist=distance[i];
v=i;
}
}
}
return distance[end];
}
提示:首選'const int MaxV = 500;'。它更安全,更易於調試。 – MSalters 2010-06-28 14:14:09
我沒有看到NULL指針的任何檢查。 – 2010-06-29 00:13:44