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;
    } 
    

      

  • 相关阅读:
    Web大前端面试题-Day12
    Web大前端面试题-Day11
    每天刷Web面试题(前10天汇总)
    Web大前端面试题-Day10
    Web大前端面试题-Day9
    Web大前端面试题-Day8
    Web大前端面试题-Day5
    Web大前端面试题-Day7
    Web大前端面试题-Day6
    php获取时间是星期几
  • 原文地址:https://www.cnblogs.com/mjn1/p/10796757.html
Copyright © 2011-2022 走看看