DS博客作业06--图

本周学习总结

1.1思维导图

1.2谈谈你对图结构的认识及学习体会。

1. 开始学图先接触的是图的遍历,又分为深度遍历和广度遍历,深度遍历是一个接一个遍历,而广度遍历的是一层遍历完后再遍历一层,与树的层次遍历有相同之处。
2.最小生成树中prim算法与kruskal:两者区别是prim算法中需要不断的去修改所找到的最小权值的操作,但是kruskal的执行时间与图的边数有关,所以适合稀疏图,而prim算法就比较适合稠密图。
3.Dijkstra算法:逐个遍历图的边,发现权值最小的边就修改最短边的路径。Floyd算法:递推产生一个矩阵序列A0,A1.......AK....AN-1,其中,A[i][j]表示i-->j的路径。

4.拓扑以及AOE网:即在有向图中找一个拓扑序列的过程即是拓扑排序;入度为0开始到结束出度为0的结束世界。

2.PTA实验作业

2.1.题目1:图着色问题


2.1.1设计思路

#include<iostream>
#include<vector>
#include<map>
定义vector<> G[50]定义了50个整型元素的向量
定义全局变量 数组color[505],v,e,k,flag;
int main()
 {
    定义 x,y;  //
    输入边,顶点,颜色;
   for(i 1to  e)
{
  scanf(x,y);
  G.push_back(x); //在G的最后一个向量后插入一个元素,其值为x
  G.push_back(y); //在G的最后一个向量后插入一个元素,其值为y
    }
scanf(t);  //输入要比较的N行
while(行数依次比较)
{
   map<int,int>mp;
    for(i=1 to v)
  {
     输入颜色数组;
     把mp[color[i]]置为1;

  }
  如果mp中的颜色个数不为输入的个数
{
直接输出NO;
}
   else
{
   flag=1;
  调用函数solve();//函数的作用是逐个比较颜色是否匹配
   if(flag) 输出Yes;
    else   //颜色不匹配输出NO

2.1.2代码截图



2.1.3本题PTA提交列表说明

  • A:开始时按照自己的想法做了一下,在编译器上改了半天还是没得出正确答案,于是集上网找了一下,学习用vector做法,哎呀妈呀,代码真的少,于是毫不犹豫就用这种做法,不过还是找了同学的代码参考,对比了一下自己的开始的错误。

2.2 题目2:六度空间



2.2.1设计思路

#include<iostream>
#include<stdio.h>
#include<queue>
定义bool型  map[1001][1001]={false};
 定义 全局变量n,m,count;
 int main()
 {
   cin>>n>>m;
   for(i=0 to m)
  {
   map[][]初始化置为1;
 }
  for(int i=1 to n)
{
   count=1;//count计数
   调用广度遍历图
   全局变量计数即可计算所占比例
   输出;
   }
 BFS函数
{
   在广度遍历的基础上加上遍历每当计数层次的level==6时结束。
  定义bool型 visited[10001]={false}
  queue<int>q;//运用队列
  int level,last=x,tail=0;  //分别用来计数层次,记录当前层次的最后一个元素,指向下一层的最后一个元素。
while(队列不空的情况)
{
    取队头;
      如果没遍历过就遍历,顺便加上遍历标记;
}
  
   if(level==6) break;


2.2.2代码截图




2.2.3提交列表及其说明

  • A:这道题广度遍历来做,再熟悉使用了一下广度遍历的思想,但开始是没想到计算比例具体要怎么来算的,找了一下度娘,再加上之前自己的代码加上当遍历到level=6时结束,格式这块搞错了 一下,改过来就可以了。

2.3 题目3:公路村村通


2.3.1设计代码

#include<iostream>
 using namespace std;
#define INF 65535
#defineMaxtexNum 1001
int main()

{
调用函数init();
调用函数prim();
}
init函数
{
  cin>>边>>点;
 初始化
while((e--) 
 {
  cin>>V>>M;
 map[V][M]=map[M][V]=weight;
  }

prim函数、、最小生成树
{
  for(i=1 to Nv)
   {  cost[i] =map[1][i];
   }
  置访问标记;
for(i=1  to Nv)
{
   调用findMin函数找最小;
  if(找到了)
{
    收到集合里;
   更新找到的最小;
}

findMin()函数
{
  遍历j=1;j<Nv)
  {
  if(cost[j]!=0&&cost[j]<mincost)
  找到最小}
返回k;

}

2.3.2代码截图




2.3.3提交列表及其说明

  • A:这道题主要是考最小生成树的两个算法,在学习了prim算法后思路其实比较好理解的,这道题是百度的,虽然懂得了prim算法的大致思路,但是在写代码时候还是无从下手。

3、上机考试错题及处理办法

  • 题目


3.1.截图错题代码



3.2 错的原因及处理方法

错误的是在图的遍历中越界了没发现,应该是从0开始to n;我写的是<=n;查错时候一直没发现,下来对比代码才发现。处理,直接改遍历的边界,把=去掉就可以了。

代码


  • 考试发蒙,最小路径都忘记了。。。。。。
posted @ 2019-06-02 12:05  WHOUG  阅读(223)  评论(0编辑  收藏  举报