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 正确代码

posted on 2019-06-01 14:56  风言风语r  阅读(238)  评论(0编辑  收藏  举报

导航