// 离散数学p261_11_b.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdlib.h"
#define NODENUM 10
#define STARTNODE 0
#define TARGENODE 9
char NodeChars[NODENUM]={'A','B','C','D','E','F','G','H','I','J'};
int g_aNodes[NODENUM][NODENUM]={
{0,1,10,6,3,0,0,0,0,0},
{1,0,10,0,0,10,0,0,0,0},
{10,10,0,4,0,1,4,1,0,0},
{6,0,4,0,2,0,0,3,0,0},
{3,0,0,2,0,0,0,6,8,0},
{0,10,1,0,0,0,0,0,0,5},
{0,0,4,0,0,0,0,0,0,2},
{0,0,1,3,6,0,0,0,0,8},
{0,0,0,0,8,0,0,0,0,5},
{0,0,0,0,0,5,2,8,5,0}};
int g_iPath[NODENUM+1];
int SearchPath(const int aDistMartix[NODENUM][NODENUM],int aPathStack[NODENUM],const int iPathDist,const int iCurrNode,int iStackPoints)
/*aDistMartix是数据矩阵,aPathStack 是本次搜索过的路径, iPathDist 是路径长度,
iCurrNode 当前节点 ,iStackPoints 堆数据中的数据数目*/{
int i=0;
int j=0;
int r=0;
for (i=0;i<iStackPoints;i++){
if (iCurrNode == aPathStack[i])
{return 0;}
}
aPathStack[iStackPoints++]=iCurrNode;
//search the nest
for (i=0;i<NODENUM;i++){
if (aDistMartix[iCurrNode][i]>0){
if (TARGENODE==i){//print
printf("%d",iPathDist+aDistMartix[iCurrNode][i]);
for(int j=0;j<iStackPoints;j++){
printf("%c->",NodeChars[aPathStack[j]]);
}
printf("%c/n",NodeChars[TARGENODE]);
r++;}
else{
r+=SearchPath(aDistMartix,aPathStack,iPathDist+aDistMartix[iCurrNode][i],i,iStackPoints);
}
}
}
return r;
}
int _tmain(int argc, _TCHAR* argv[])
{
printf("----------------------------/n");
int iPN=0;
iPN=SearchPath(g_aNodes,g_iPath,0,0,0);
printf("-----------------------------/n%d/n/n",iPN);
system("PAUSE");
return 0;
}
p261_11_b题目解决方法
最新推荐文章于 2022-10-27 10:10:44 发布