您的位置:首页 > 其它

Dijkstra模板。。。太久没写,,手生了。。。

2010-03-29 21:39 316 查看
#include <stdio.h>  
#include <string.h>  
#define NUMOFPOINT 205 
#define INF 999999999

void InitWay(int Way[][NUMOFPOINT])
{
	int i, j;
	for(i = 0; i<NUMOFPOINT; i++)
		for (j = 0; j<NUMOFPOINT; Way[i][j++] = INF);
}

void Dijkstra(int Way[][NUMOFPOINT], int dist[], int n, int s)
{
	int i, j, min, pos, set[NUMOFPOINT];
	memset(set, 0, sizeof(set));
	for (i = 0; i <= n; i++)
		if ( (dist[i] = Way[s][i]) != INF )
			set[i] = 1;
		
	set[s] = 2;
	for (i = 2; i <= n; i++)
	{
		for (j = 1, min = INF; j <= n; j++)
			if (set[j] == 1 && dist[j] < min)
			{
				min = dist[j];
				pos = j;
			}
		set[pos] = 2;
		for (j = 1; j <= n; j++)
			if ((Way[pos][j] + dist[pos] < dist[j]) || set[j] == 0)
			{
				dist[j] = Way[pos][j] + dist[pos];
				set[j] = 1;
			}
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: