第六章学习小结

1、在第六章我们学习了图的定义及一些基本术语:有向图和无向图、度、入度、出度、邻接点、连通图等;学习了图的类型定义;学习了用不同的方法(邻接矩阵、邻接表)表示图的存储结构;图的遍历(深搜与广搜);图的应用(最小生成树、最短路径);在学习过程中,首先得先熟悉了图相关的术语定义等内容才能继续更好地往下学,后面学习的图的遍历,存储结构等会有较大难度,需要不断看书找资料加深理解。

2、拯救007:

刚开始看到这个题目的时候,思考了一定时间有了一点思路,但是到最后动手打代码的时候还是会有点被卡住,后来通过百度和csdn博客找到相关的解题方法,了解到:

(1)首先要判断人是否可以到达岸边

(2)之后判断是否能跳出第一步,即能否从岸边跳到第一只鳄鱼的头

(3)判断能否从一个鳄鱼跳到另一个鳄鱼

(4)判断能否跳跃到池外

(5)进行深度搜索

 

实际写代码过程中,先把相关数据定义好:

struct node{
    int x,y;
}dot[110];
int vis[110];
int flag=0;
int N,D;

之后根据整理好的思路将一个个子函数写出来:

int succ(int k)
{
    if(dot[k].x-D<=-50||dot[k].x+D>=50||dot[k].y-D<=-50||dot[k].y+D>=50)
    return 1
    else return 0; 
} 
int first(int j)
{
    int d1=dot[j].x*dot[j].x;
    int d2=dot[j].y*dot[j].y;
    int r=(D+7.5)*(D+7.5);
    if(r>=d1+d2)
     return 1;
     return 0; 
} 

 

int jump(int u,int i)
{
    int d1=pow(dot[u].x-dot[u].x,2);
    int d2=pow(dot[i].y-dot[i].y,2);
    if(D*D>=d1+d2)
      return 1;
      return 0;
} 

  最后在将main函数写出,但是在写代码过程中,我没有很准确地计算好相关数据,然后还有一些大于小于号等问题导致我的代码总是出现错误,无法通过检测点,后来通过自己检查了很久,还请同学帮忙看了代码才找出了错误,所以打代码的时候除了必要的知识过关之外还需要非常细心。运用广搜的时候还需要对相关知识了解清楚,对怎么进行下一步搜索这个刚开始忘了怎么实现导致被卡了较久,后面通过看书并结合慕课将其弄明白。main函数如下:

int main()
{
    cin>>N>>D;
    int i;
    for(i=0;i<N;i++)
    cin>>dot[i].x>>dot[i].y;
    if(D>=42.5)
    cout<<"Yes"<<endl;
   else
  {
    for(i=0;i<N;i++)
    {
   if(firststep(i))
     {
       memset(vis,0,sizeof(vis));
       DFS(i);
     }
    }
   if(flag==1)
   cout<<"Yes"<<endl;
   else cout<<"No"<<endl;
  }
    return 0;
 } 

  3、上次制定的计划大致完成,下一周的目标是将书中图这章内容多看几遍,记得更清楚一些,提高自己小测的成绩,不再在一些细节的地方失分。

posted @ 2019-05-19 23:40  笛声不续  阅读(139)  评论(0编辑  收藏  举报