DS博客作业06--图

本周学习总结

1.1思维导图

1475247-20190608214918930-1974235786.png

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:图着色问题

1475247-20190608231058937-901374709.png
1475247-20190608231114306-529055165.png

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代码截图

1475247-20190608230608121-646250415.png
1475247-20190608230641442-1473915225.png
1475247-20190608230733356-675692318.png

2.1.3本题PTA提交列表说明

1475247-20190608231013359-993399866.png

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

2.2 题目2:六度空间

1475247-20190609020405590-336064999.png
1475247-20190609020447313-1436733653.png
1475247-20190609020505505-1131218137.png

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代码截图

1475247-20190609020739016-993885980.png
1475247-20190609020755538-1952286800.png
1475247-20190609020808157-200940765.png
1475247-20190609020820753-1765192839.png

2.2.3提交列表及其说明

1475247-20190609021204502-2127942533.png

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

2.3 题目3:公路村村通

1475247-20190609024553588-1550200431.png
1475247-20190609024608966-1712566958.png

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代码截图

1475247-20190609025829374-1078403365.png
1475247-20190609025840914-1245759452.png
1475247-20190609025850781-92410211.png
1475247-20190609025902944-1471861181.png

2.3.3提交列表及其说明

1475247-20190609030145428-469337940.png

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

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

  • 题目
    1475247-20190609033523304-106431576.png
    1475247-20190609033535109-262341627.png
    1475247-20190609033545815-32657830.png

    3.1.截图错题代码

    1475247-20190609100953957-1087083980.png
    1475247-20190609101013143-2087659620.png
    1475247-20190609101024953-1492151981.png

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

1475247-20190609103102544-1019264571.png
1475247-20190609103111594-112519299.png

  • 考试发蒙,最小路径都忘记了。。。。。。

转载于:https://www.cnblogs.com/ttyppt/p/10962462.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值