zoukankan      html  css  js  c++  java
  • Graph I

    Graph

    There are two standard ways to represent a graph G=(V,E)G=(V,E), where VV is a set of vertices and EE is a set of edges; Adjacency list representation and Adjacency matrix representation.

    An adjacency-list representation consists of an array Adj[|V|]Adj[|V|] of |V||V| lists, one for each vertex in VV. For each uVu∈V, the adjacency list Adj[u]Adj[u] contains all vertices vv such that there is an edge (u,v)E(u,v)∈E. That is, Adj[u]Adj[u] consists of all vertices adjacent to uu in GG.

    An adjacency-matrix representation consists of |V|×|V||V|×|V| matrix A=aijA=aij such that aij=1aij=1 if (i,j)E(i,j)∈E, aij=0aij=0 otherwise.

    Write a program which reads a directed graph GG represented by the adjacency list, and prints its adjacency-matrix representation. GG consists of n(=|V|)n(=|V|) vertices identified by their IDs 1,2,..,n1,2,..,nrespectively.

    Input

    In the first line, an integer nn is given. In the next nn lines, an adjacency list Adj[u]Adj[u] for vertex uu are given in the following format:

    ukv1v1 v2v2 ... vkvk

    uu is vertex ID and kk denotes its degree. vivi are IDs of vertices adjacent to uu.

    Output

    As shown in the following sample output, print the adjacent-matrix representation of GG. Put a single space character between aijaij.

    Constraints

    • 1n1001≤n≤100

    Sample Input

    4
    1 2 2 4
    2 1 4
    3 0
    4 1 3
    

    Sample Output

    0 1 0 1
    0 0 0 1
    0 0 0 0
    0 0 1 0

    #include <iostream>
    using namespace std;
    const int N = 100;
    
    int main()
    {
    	int M[N][N];	// 0 0起点的邻接矩阵
    	int n, u, k, v;
    	
    	cin >> n;
    	for(int i = 0; i < n; ++ i)
    	{
    		for(int j = 0; j < n; ++ j)
    		{
    			M[i][j] = 0;
    		}
    	} 
    	
    	for(int i = 0; i < n; ++ i)
    	{
    		cin >> u >> k;
    		u --;	// 转换为0起点 
    		for(int j = 0; j < k; ++ j)
    		{
    			cin >> v;
    			v --;	// 转换为0起点 
    			M[u][v] = 1;	// 在u和v之间画出一条边 
    		}
    	}
    	
    	for(int i = 0; i < n; ++ i)
    	{
    		for(int j = 0; j < n; ++ j)
    		{
    			if(j)	cout << " ";
    			cout << M[i][j];
    		}
    		cout << endl;
    	}
    	
    	return 0;
    } 
    

      

  • 相关阅读:
    给统计人讲python(3)模拟城市_数据分析
    非均匀时间序列按固定时间间隔求和
    随机训练样本的方法
    df.empty判断空df,timestamp推算n秒前的时间
    优雅地循环字典键值
    panel的dropna方法
    给统计人讲Python(4)_股票数据处理
    给统计人讲Python(2)_Pandas入门
    给统计人讲Python(1)_科学计算库-Numpy
    生成不重复随机数
  • 原文地址:https://www.cnblogs.com/mjn1/p/10796757.html
Copyright © 2011-2022 走看看