题目链接:http://codeforces.com/problemset/problem/402/C
题意:给 n 个顶点,标号 1 ~n ,p 满足下面三个条件:
1、这个图包含 2*n+p 条边
2、没有环和多重边
3、k(1~n)的顶点的子图最多有 2*n + p 条边
输入: t (t 组测试数据 1<=t <=5)每组数据包含 n 和 p 。(5 ≤ n ≤ 24; p ≥ 0; )
输出: 对每组数据输出 2*n + p 条边,用相应顶点表示,每条边占一行。
思路:n 个顶点,最多有 n(n-1)/2 条边(即 1+2+...+(n-1)),这样只要输出前面的 2*n + p 条边就好。应该只是个考题意的题,简单构造。
Code:
#include <stdio.h>
int main(){
int t, n, p;
scanf("%d", &t);
while(t--){
scanf("%d%d", &n, &p);
int m = 2*n + p;
int i, j;
for(i = 1; i <= n && m; ++i)
for(j = i+1; j <= n && m; ++j, --m)
printf("%d %d\n", i, j);
}
return 0;
}