用c++代码实现贪心算法求解最短路径问题

贪心算法求解最短路径问题:

假设算法要处理下图,需要把图数据组织存放到相应的数据结构中。

 
 《用c++代码实现贪心算法求解最短路径问题》

 

 

 

 

 

 

 这个是头文件stdafx.h中的内容

#pragma once
#include <stdio.h>
#include <tchar.h>
#include <iostream>

 tanxin_ari.cpp中的内容

#include "stdafx.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int graph[6][6] ={ 
							{0 ,-1 ,15 ,-1 ,-1 ,-1 }, 
							{2 ,0 ,-1 ,-1 ,10 ,30 },
							{-1 ,4, 0 , -1,-1 ,10 },
							{ -1,-1, -1 ,0 ,-1 ,-1 },
							{ -1,-1, -1 ,15 ,0 ,-1 },
							{ -1,-1 ,-1 ,4  ,10 ,0 }
						};

	//遍历输出:初始数据
	for (int m = 0; m < 6; m++){
		for (int n = 0; n < 6; n++){
			cout << graph[m][n] << " ";
		}
		cout << endl;
	}
	
	
	/*
			//如果要自己输入其他数据,就把下面这段解放出来。
			//在没有任何输入的情况下,赋值:
			for (int m = 0; m < 6; m++){
				for (int n = 0; n < 6; n++){
					if (m == n){
						graph[m][n] = 0;
					}else{
						graph[m][n] = -1;
					}
				}
			}
			cout << "输入规则:第一个数为起点,第二个数为终点,最后一个数为距离。"
				"相同两个数,如<1,1>,距离为0;没有输入的距离自动为-1,既是从这点倒那点暂时无法到达,输入负数开始运算" << endl;

			int i=1, j=1, k=0;
			int tag=1;
			do{
				if(graph[i - 1][j - 1] < k && graph[i - 1][j - 1]!= -1 ){
					
				}else{
					graph[i - 1][j - 1] = k;
				}
				
				cin >> i;
				if (i >= 0){
					cin >> j;
					if (j >= 0){
						cin >> k;
						if (k >= 0){
							cout << "输入成功:" << endl;
						}else{
							tag = 0;
						}
					}else{
						tag = 0;
					}
				}else{
					tag = 0;
				}
			} while (tag==1);
			*/

	//当起始为i时;
	for (int i = 1; i < 7; i++){

	
			int tnum[6] = {0,0,0,0,0,0};//其中0代表这个数还没有纳入已经有的圈子。
			tnum[i - 1] = 1;
			int tno = 0;				//tno代表没有被纳入圈子的数字的个数.
			//为tno赋值。
			for (int t = 0; t < 6;t++){
				if (tnum[t]==0){
					tno++;
				}
			}
			for (int d = 0; d <5;d++){

					int min = 10000;		//这个数为在未包含的部分中离起点最小的距离。
					int min_num;			//这个数为与起点之间出现min处的 数。分别为1到6
					for (int q = 0; q < 6;q++){
						if (tnum[q] == 0 && graph[i - 1][q] != -1 && graph[i - 1][q]<min){
							min = graph[i - 1][q];									//找出min和min_num
							min_num = q + 1;
					
						}
		
					}
			
					tnum[min_num - 1] = 1;
					for (int q = 0; q < 6; q++){
						if (tnum[q] == 0 && graph[min_num - 1][q] != -1){
							if (graph[i - 1][q] == -1 || graph[i - 1][q]>(graph[min_num - 1][q] + min)){		//根据min和min_num跟新数据

								graph[i - 1][q] = graph[min_num - 1][q]+min;

							}
						}
					}
			}
	}

	cout << "最后结果:" << endl;

	//遍历输出:最后结果
	for (int m = 0; m < 6;m++){
		cout << endl;
		for (int n = 0; n < 6;n++){
			cout << graph[m][n] << " ";
		}
	}
	system("pause");
	return 0;
}




    原文作者:贪心算法
    原文地址: https://blog.csdn.net/yuanmuxingchen/article/details/50101465
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞