计蒜客第七章:画图游戏

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/shidonghang/article/details/102692273

计蒜客习题:画图游戏

题目

在这里插入图片描述

样例

在这里插入图片描述

思路

由于答案不唯一,所以选择最简单的方案即可,由度数从大到小看,将度数最大点与前度数个点连边,被连边的点度数减少,反复操作,直到所有点的度数分配好。

代码

#include<iostream>
#include<algorithm>
using namespace std;
int n;
int mp[20][20];
struct node
{
    int pos,d;
}du[20];
bool cmp(node a,node b)
{
    if(a.d!=b.d) return a.d>b.d;
    else return a.pos<b.pos;
}
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>du[i].d;
    	du[i].pos=i;
    }
    sort(du,du+n,cmp);
    while(du[0].d)
    {
        for(int i=1;i<=du[0].d;i++)
        {
            mp[du[0].pos][du[i].pos]=mp[du[i].pos][du[0].pos]=1;
            du[i].d--;
            if(du[i].d<0) {cout<<"None";return 0;}
        }
        du[0].d=0;
        sort(du,du+n,cmp);
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(!j) cout<<mp[i][j];
            else cout<<" "<<mp[i][j];
        }
    	cout<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/shidonghang/article/details/102692273