迪杰斯特拉和普利姆算法

#include
using namespace std;
#define N 10000
typedef struct Net{
	int **weight;
	int numNodes;
}Net,*NetPtr;
NetPtr initNet(int paraSize,int** paraData){
	NetPtr resultPtr=(NetPtr)malloc(sizeof(Net));
	resultPtr->numNodes=paraSize;
	resultPtr->weight=(int**)malloc(sizeof(int*)*paraSize);
	for(int i=0;iweight[i]=(int*)malloc(sizeof(int)*paraSize);
		for(int j=0;jweight[i][j]=paraData[i][j];
		} 
	}
	return resultPtr;
}
int dijkstraOrPrim(NetPtr paraPtr,int paraAlgorithm){
	int source=0;
	int numNodes=paraPtr->numNodes;
	int minDistance,tempBestNode,resultCost;
	int* distanceArray=(int*)malloc(sizeof(int)*numNodes);
	int* parentArray=(int*)malloc(sizeof(int)*numNodes);
	int* visitArray=(int*)malloc(sizeof(int)*numNodes);
	for(int i=0;iweight[source][i];
		parentArray[i]=source;
		visitArray[i]=0;
	}
	distanceArray[source]=0;
	parentArray[source]=-1;
	visitArray[source]=1;
	tempBestNode=-1;
	for(int i=0;idistanceArray[j]){
				minDistance=distanceArray[j];
				tempBestNode=j;
			}
		}
	visitArray[tempBestNode]=1;
	for(int j=0;jweight[tempBestNode][j]>=N)
		continue;
		if(!paraAlgorithm){
			if(distanceArray[j]>distanceArray[tempBestNode]+paraPtr->weight[tempBestNode][j]){
				distanceArray[j]=distanceArray[tempBestNode]+paraPtr->weight[tempBestNode][j];
				parentArray[j]=tempBestNode;
			}
		}
		else{
			if(distanceArray[j]>paraPtr->weight[tempBestNode][j]){
				distanceArray[j]=paraPtr->weight[tempBestNode][j];
				parentArray[j]=tempBestNode;
			}
		}
	}
}
	printf("the parent of each node: ");
	for (int i=0;i

你可能感兴趣的:(算法,c++,数据结构)