zoukankan      html  css  js  c++  java
  • DS博客作业06--图

    1.本周学习总结

    1.思维导图

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

    图结构与之前学的树结构一样都是非线性数据结构,但是图结构比树结构更加复杂,图结构中每一个元素都可以有零个或者多个前驱元素,也可以有零个或者多个后继元素。图常用的存储结构有邻接矩阵与邻接表。图的遍历分为广度遍历和深度遍历。深度遍历类似于树的先序遍历,是先序遍历的一种推广,简称为DFS。而广度遍历类似于树的层序遍历,是树的层序遍历的推广,简称BFS。求图的最小生成树一般用普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法。求最短路径一般使用迪杰斯特拉(Dijkstra)算法和弗洛伊德(Floyd)算法。

    2.PTA实验作业

    2.1.题目1:7-3 六度空间 (30 分)
    图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色?
    
    但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。
    
    2.1.1设计思路(伪代码)
    Graph *creat()   //创建图 
    {
    	图的邻接矩阵构造算法 
    }
    void dfs(Graph *g,int i)   //深度遍历 
    {
    	for j=1;j<=g->v;j++
    		if g->a[i][j]==1 && visited[j]==0 
    		  dfs(g,j);
    	    end if 
    	end for 
    } 
    void dfs1(Graph *g)
    {
    	for(i=1;i<=g->v;i++)
    		if(visited[i]==0) 
    		  dfs(g,i)
    		end for
    	end for	 
    } 
    int main()
    {
    	定义 int类型变量 flag 来记录图的着色是否符合要求 
    	定义 Graph*类型指针 g
    	while(n--) 
    	{
    		先定义flag=1,为着色符合要求的情况
    		定义整型数组b[501]={0},c[501],e[501]
    		for(i=1;i<=g->v;i++)
    		
    			if(b[c[i]]==1) 
    			  sum++
    			end if  
    		end for
    		if(sum!=z) 
    		  flag=0   //不符合
    		 end if
    		for(i=0;i<k;i++)
    			for(j=0;j<k;j++)
    				if(g->a[d[i]][d[j]]==1 && e[i]==e[j])
    					flag=0  //不符合 
    					break
    				end if
    			end for 
    			if(flag==0)
    			  break
    			end if 
    		end for	   
    	}
    } 
    
    2.1.2代码截图


    2.1.3本题PTA提交列表说明。

    2.2.题目2:7-1 图着色问题 (25 分)
    图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色?
    
    但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。
    
    2.2.1设计思路(伪代码)
    本题用图的邻接矩阵存储结构,用图的广度遍历完成
     void BFS(int id)
    {
     	库函数创建整数型栈 Q 
     	栈中插入 id
    	for(int deep=0;deep<6;deep++)
            vector<int> v;
            while(Q.size()>0)
            {
                int tmp=Q.front();
                Q.pop();
                v.push_back(tmp);
            }
            for(int i=0;i<v.size();i++)
                int xx=v[i];
                for(int j=1;j<=n;j++)
                    if(G[j][xx]==1 && vis[j]==0)
                        vis[j]=1;
                        cnt++;
                        Q.push(j);
                    end if 
                end for 
            end for 
        end for 
    } 
    
    2.2.2代码截图



    2.2.3本题PTA提交列表说明。

    2.3.题目3:7-4 公路村村通 (30 分)
    现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。
    
    2.3.1设计思路(伪代码)
    void CreateGraph(int v,int e)   //建图 
    {
    	邻接矩阵建图操作 
    }
    int Prim(int v,int e)   //Prim算法
    {
    	定义整型变量 min,i,j,k;
    	i定义整型数组 lowcost[MAXVEX];
    	定义整型变量 cost=0;
    	lowcost[1]=0;
    	for i=2 to v
    		lowcost[i]=G[1][i]
    	end for
    	for i=2 to v
    	    min=INF
    	    j=1   k=0
    	    while(j<=v)
    	        if(lowcost[j]!=0&&lowcost[j]<min)
    	            将lowcost[]数组最小的边赋值给min
                    用k记录该边所对应的顶点
                end if 
    			j++
    		end while
    		if(k==0)
    		   return -1
    		end if
    		cost+=min
    		lowcost[k]=0
    		for j=2 to v
    		    if(lowcost[j]!=0&&G[k][j]<lowcost[j])  	
    		       lowcost[j]=G[k][j]
    		    end if
    		end for
        end for    
    } 
    
    2.3.2代码截图



    2.3.3本题PTA提交列表说明。

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

    3.1.截图错题代码

    #######3.1.1题目:6-1 jmu-ds-最短路径 (20 分)

    给定一个有向图,规定源点为0,求源点0到其他顶点最短路径。
    
    3.2 错的原因及处理方法

    #######3.2.1

    本题在上机考试时没有写
    

    #######3.2.2 正确代码

  • 相关阅读:
    Shiro【常用的自定义】
    Shiro【重要概念总结】
    Shiro【自定义Realm实战】
    Shiro【内置Realm实操】
    Shiro【快速上手】
    Shiro【初识】
    面向对象【抽象类和接口的区别】
    面向对象【多态中的成员访问特点】
    Kafka2.12-2.5.0在windows环境的安装 启动 通信测试
    CentOS.iso 下载地址收纳整理
  • 原文地址:https://www.cnblogs.com/2084624983yue/p/10959641.html
Copyright © 2011-2022 走看看