#include<bits/stdc++.h>
//连通路径
using namespace std;
const int M = 1000;
struct point{
int start;
int end;
int len;
}P[M];
bool com(point x, point y) {
return x.len < y.len;
}
int main( )
{
int T;
cin >> T;
int n;
vector<int> v;
vector<vector<int>> arr;
int t = 0;
int value =0;
int flag = 0;
set<int>s;
for(int i=0;i<T;i++){
cin >> n;
for(int j=1;j<=n;j++){
for(int m =1;m<=n;m++){
// 把数据输入 起点 终点 距离
if(m>=j){
P[t].start = j;
P[t].end = m;
cin >> value;
if(value!=0){
P[t].len=value;
t++;
}
}
else{
// P[t].start = m; //1 (1,3)
// P[t].end = j; //3
cin >> value;
// P[t].len = value;
if(value !=0) {
int index = (m-1) + (j-1)*n;
if(P[index].len > value){
P[index].len = value;
}
}
// t++;
}
v.push_back(value);
}
arr.push_back(v);
v.clear();
}
sort(P, P+t, com);
}
// for(int i=0;i<t;i++){
// cout <<P[i].start <<" " << P[i].end << " " << P[i].len << endl;
// }
cout << n-1 << endl;
int temp =0;
for(int i=0;i<t;i++){
int a = P[i].start;
int b = P[i].end;
if(s.size() < 1) {
s.insert(s.end(),a);
s.insert(s.end(),b);
temp++;
cout << a << " "<< b << endl;
}
else{
for(int i=0;i<s.size();i++){
if(s.count(a) && s.count(b)){
break;
}
else{
s.insert(s.end(),a);
s.insert(s.end(),b);
temp++;
cout << a <<" " << b << endl;
}
}
}
if(temp==n){
break;
}
}
return 0;
}
百度之星 题一 洞穴
最新推荐文章于 2024-07-24 14:05:37 发布