数组模拟,全挂,求改
  • 板块B3643 图的存储
  • 楼主Relisc
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/3 17:17
  • 上次更新2024/7/3 20:14:28
查看原帖
数组模拟,全挂,求改
1330072
Relisc楼主2024/7/3 17:17
#include <bits/stdc++.h>
#include <cstring>
using namespace std;
const int N=1050;
const int M=1e5+10;
int ma[N][N];
int e[N],ne[M],h[M],idx;
vector <int> ans;

void add(int a,int b){
    e[idx]=b;
    ne[idx]=h[a];
    idx++;
}

//求邻接表上边表的度数以及输出顶点;
void degree(int u){
    for(int i=h[u];i !=-1;i=ne[i])  ans.push_back(e[i]);
    cout<<ans.size()<<" ";
    
    //排序输出
    sort(ans.begin(),ans.end());
    for(auto x:ans)     cout<< x <<" ";
    ans.clear();//清空
}

int main(){
    memset(h,-1,sizeof h);
    int n,m;
    cin>>n>>m;
    
    while(m--){
        int u,v;
        cin>>u>>v;
        ma[u][v]=ma[v][u]=1;
        add(u,v),add(v,u);
    }
    
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
            cout<<ma[i][j]<<" ";
        cout<<endl;
    }
    
    for(int i=0;i<n;i++) 
    {
        degree(e[i]);
        cout<<endl;
    }
        
    return 0;
}
2024/7/3 17:17
加载中...