您好,欢迎来到世旅网。
搜索
您的当前位置:首页第3关:到目标结点需要多少步

第3关:到目标结点需要多少步

来源:世旅网

任务描述
相关知识
编程要求
任务描述

本关任务:编写一个计算从起点找到目标点的过程需要多少步。

相关知识
前两关我们已经练习了分别通过DFS和BFS遍历所有的图结点,所以这是一种穷举式的查找方法。在遍历过程中如果记录到达每个结点的步数,则我们可以了解一下两种查找方法的时间性能特点。

具体方法是两种方法在输出结点的时候,同时计数。

编程要求
根据提示,在右侧编辑器补充代码,输出两种方法找到目标结点的步数。

开始你的任务吧,祝你成功!

#include <stdio.h>
#include "SeqQueue.h"
#define N 7
char Name[N+1]="ABCDEFG";

int Adj[N][N]=
{
//填写邻接矩阵
      {0,1,1,0,0,0,0},
      {0,0,0,1,0,0,0},
      {0,0,0,1,1,0,0},
      {0,0,1,0,0,1,1},
      {0,0,0,1,0,0,1},
      {0,0,0,0,0,0,1},
      {0,0,0,0,0,0,0}

};
int count1=0;
int count2=0;
int visit[N]={0};
void DF(int i,int end){

    count1++;
    visit[i]=1;
    for (int j = 0; j < N; ++j) {
        if ( Adj[i][j]== 1 && visit[j]==0){
            DF(j,end); // 对为访问的邻接顶点递归调用
           
        }
    }
}
int BFS(int start, int end){
//宽度优先,返回从start到end的访问结点数
  int i, j;
  int qu[100],f=0,r=0;
  for (i = 0; i <N; ++i) {
        visit[i] = 0;
    }
  i=start;
  visit[i]=1;
  qu[r++]=i;
   while(f<r)
   {
      i=qu[f++];
      for(j=0,j!=i;j<N;j++)
      {
         if(Adj[i][j]==1&&!visit[j])
         {
           visit[j]=1;
           count2++;
           qu[r++]=j;
         }
      }
   }
   return count2;
   
}

int DFS(int start, int end){
//深度优先,返回从start到end的访问结点数


   int i;
    // 初始化所有顶点状态都是未访问过状态
    for (i = 0; i <N; ++i) {
        visit[i] = 0;
    }
    
    //防止图为非联通的情况,遍历整个图
    for (i = start; i < end; ++i) {
        if (visit[i]==0){   // 若是连通图,只会执行一次
            DF(i,end);          
        }
    }
if(start==0)
   return count1;
   else return count1-1;
}



因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- esig.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务