Problem Description
给出图的顶点数和顶点与顶点之间的连接关系,请输出图的邻接表。
Input
输入的第一行是一个整数T表示测试示例的数目,每组示例的第一行有两个数m(2<=m<=15)和n(1<=n<=m*(m-1)/2),m表示顶点的个数(顶点的标号从1-m),n表示边的个数。下面n行的每行表示一条边。
Output
对于每组数据输出图的邻接表,每组邻接表之间用空行隔开。每个邻接表每行的第一个数字为顶点号(顶点号按顺序排列),后面的数字是与该顶点有边相邻的顶点序列。输出顶点的前后顺序与其边出现的前后顺序相同。如1 2和1 3两条边先后出现,则在邻接表中与顶点1相邻的顶点2出现在顶点3的前面。
Sample Input
1 2 1 1 2
Sample Output
1 2 2 1
//标程:
#include<stdio.h> #include<string.h> #include<vector> //#include<algorithm> using namespace std; vector<int> v[20]; int main() { //freopen("a.txt","r",stdin); int n,m,i,j,a,b,t; scanf("%d",&t); while(t--) { for(i=0;i<20;i++) v[i].clear(); scanf("%d%d",&n,&m); for(i=1;i<=m;i++) { scanf("%d%d",&a,&b); v[a].push_back(b); v[b].push_back(a); } for(i=1;i<=n;i++) { if(v[i].size()) { printf("%d ",i); //sort(v[i].begin(),v[i].end()); for(j=0;j<v[i].size();j++) if(j==v[i].size()-1) printf("%d\n",v[i][j]); else printf("%d ",v[i][j]); } else printf("%d\n",i); } if(t!=0) printf("\n"); } return 0; }