최단 경로 우선 검색 권한 없음

1380 단어
《데이터 구조와 알고리즘 분석-C 언어 묘사》 제9장
O(V^2)
void unweighed(Vertex srcVex,Graph g) {
	int currDist;
	Vertex v, w;

	int *known = (int *)malloc(sizeof(int)*vexNum);
	if (known == NULL)
		Error("OUT OF MEMORY");
	for (int i = 0; i < vexNum; i++)
		known[i] = 0;

	int *dv = (int *)malloc(sizeof(int)*vexNum);
	if (dv == NULL)
		Error("OUT OF MEMORY");
	for (int i = 0; i < vexNum; i++)
		dv[i] = INT_MAX;
	dv[srcVex] = 0;

	int *pv = (int *)malloc(sizeof(int)*vexNum);
	if (pv == NULL)
		Error("OUT OF MEMORY");
	for (int i = 0; i < vexNum; i++)
		pv[i] = srcVex;

	for (currDist = 0; currDist < vexNum; currDist++) {
		for (v = 0; v < vexNum; v++) {
			if (!known[v] && dv[v] == currDist) {
				known[v] = 1;
				EdgeNodePtr p = getEdgeNodePtr(v, g);
				while (p) {
					w = getVex(p);
					if (dv[w] == INT_MAX) {
						dv[w] = currDist + 1;
						pv[w] = v;
					}
					p = advance(p);
				}
			}

		}
	}
	for (int i = 0; i < vexNum; i++) {
		
		int j = i;
		if (known[j] == 1) {
			std::stack<int> s;
			if (j != srcVex)
				s.push(j);
			while (pv[j] != srcVex) {
				s.push(pv[j]);
				j = pv[j];
			}
			s.push(pv[j]);
			while (!s.empty()) {
				printf("%d ", s.top());
				s.pop();
			}
			printf("
"); } else { printf("cannot reach
"); } } }

좋은 웹페이지 즐겨찾기