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

      

  • 相关阅读:
    简例 一次执行多条mysql insert语句
    javax/javaee-api/ Maven依赖
    关闭页面前提示或保存数据
    SpringMVC的controller方法上若需要参数 如User
    方正飞越 A600硬改BIOS激活win7的工具与方法。
    Win7下IE11点击无反应的解决方法
    WinXP局域网共享设置
    使用VHD,让Win XP和 Win2003 运行在内存中
    dd if=/dev/zero of=的含义是什么?Linux 下的dd命令使用详解
    win8.1点击“更改电脑设置”无反应(闪退)
  • 原文地址:https://www.cnblogs.com/mjn1/p/10796757.html
Copyright © 2011-2022 走看看