感觉没啥好写的,看代码就行。
#include<bits/stdc++.h>
using namespace std;
int n;
const int MAX_N = 20;
int mz[MAX_N][MAX_N] = {0};
struct node///用结构体存储邻接矩阵的行坐标信息
{
int deg;
int ind;
}arr[MAX_N];
bool cmp(const node &A,const node &B)
{
return A.deg>B.deg;
}
bool havel_Hakimi()
{
for(int i=0;i<n-1;i++){
sort(arr+i,arr+n,cmp);
if(i+arr[i].deg>=n) return false;
for(int j=i+1;j<=i+arr[i].deg;j++){
mz[arr[i].ind][arr[j].ind] = 1;
mz[arr[j].ind][arr[i].ind] = 1;
--arr[j].deg;
if(arr[j].deg<0) return false;
}
}
if(arr[n-1].deg!=0) return false;
return true;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++){
cin>>arr[i].deg;
arr[i].ind = i;
}
if(!havel_Hakimi()){
cout<<"None\n";
return 0;
}
for(int i=0;i<n;i++){
bool flag = 1;
for(int j=0;j<n;j++){
if(!flag) cout<<' ';
flag = 0;
cout<<mz[i][j];
}
cout<<'\n';
}
return 0;
}