现在的位置: 首页 > 综合 > 正文

p261_11_b题目解决方法

2013年03月16日 ⁄ 综合 ⁄ 共 1580字 ⁄ 字号 评论关闭

// 离散数学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;
}

 

抱歉!评论已关闭.