博客作业06--图

时间:2018-06-17 16:40:46   收藏:0   阅读:224

1.学习总结

1.1图的思维导图

1.2 图结构学习体会

2.PTA实验作业

题目1:7-1 图着色问题

1.设计思路

main函数
输入v,e,k
建图CreateAdj( G,v,e )
输入n
while(n--)
    set <int> E
    flag=true
    for i=1 to i<=v
    输入color[i],并且E.insert(color[i]),visit[i] = 0。
end
定义一个l=E.size()
若输入的颜色种类不等于k
    cout<<No,continue。
do{
    for(  i=1, i<=v&&flag ; i++ )
      若visit[i]==0 {
    则调用Check( G,k,i );
    break;}
}while( flag && i<=v );
若 flag ==1,则cout << "Yes" 
否则  cout << "No" 
Check函数
建立一个指针指向顶点v,令visit[v]=1,表示已经遍历过了。
while(p)
    若color[p->adjvex]==color[v],则说明顶点相邻的点颜色相同
    flag=false。
   若!visit[p->adjvex],则递归搜索。
     p=p->nextarc
end

2.代码截图

技术分享图片
技术分享图片

3.PTA提交列表说明

技术分享图片

题目2:7-3 六度空间

1.设计思路

建立一个队列queue <int> q,用来解决层数问题。
遍历过的x,令visit[x]=1,并将x入队q
定义lengh=1来表示层数,last=x保存每一层最后一个顶点,count=1计数人数。
while(!q.empty())
    定义v=q.front(),定义一个指针p指向v
    遍历该层所有顶点,若该点未遍历则count++,若lengh<6层,则将该点入队。
    若last==v,则lengh++,并且last=q.back()
end
输出x,100.0*count/G->n。

2.代码截图

技术分享图片

3.PTA提交列表说明

技术分享图片

题目3:7-5 畅通工程之最低成本建设问题

1.设计思路

这题的基本思路就是利用prim算法构建最小生成树。

2.代码截图

技术分享图片

3.PTA提交列表说明

技术分享图片

3.截图本周题目集的PTA最后排名

3.1 PTA排名

技术分享图片

3.2 我的得分:2.5

4. 阅读代码

匈牙利算法

#include<cstdio>  
#include<cstring>  
using namespace std;  
  
int n,m,ans;  
int match[210];//母牛i的配偶是公牛match[i]  
bool chw[210];//在此趟询问中,母牛i是否被询问过  
bool mp[210][210];//公牛i与母牛j是否有关系  
  
bool find_ans(int x)  
{  
    for(int i=1;i<=m;i++)  
    {  
        if(mp[x][i]==true&&chw[i]==true)  
        {  
            chw[i]=false;  
            if(match[i]==0||find_ans(match[i])==true)  
            //母牛没有配偶||匹配该母牛的公牛能否换一头母牛匹配   
            {  
                match[i]=x;  
                return true;  
            }  
        }  
    }  
    return false;  
}  
  
int main()  
{  
    while(scanf("%d %d",&n,&m)!=EOF)  
    {  
        memset(mp,false,sizeof(mp));  
        for(int i=1;i<=n;i++)  
        {  
            int k,x;  
            scanf("%d",&k);  
            for(int j=1;j<=k;j++)  
            {  
                scanf("%d",&x);  
                mp[i][x]=true;  
            }  
        }  
        ans=0;  
        memset(match,0,sizeof(match));  
        for(int i=1;i<=n;i++)  
        {  
            memset(chw,true,sizeof(chw));  
            if(find_ans(i)==true) ans++;  
        }  
        printf("%d\n",ans);  
    }  
    return 0;  
}  

5. 代码Git提交记录截图

技术分享图片

原文:https://www.cnblogs.com/oracler0103/p/9192226.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!