大学生算法设计与编程挑战赛——mid
Description
在平面直角坐标系上有n个整点(xi,yi)
现在需要你按照从左往右,从下往上的顺序依次给每个点编号1到n。
要求按照编号从小到大的顺序输出每个点的坐标;并按照点的输入顺序输出每个点的编号。
Input
第一行一个正整数n。表示点的个数。
接下来有n行。第i+1行有两个以空格分隔的整数xi yi
Output
共n+1行。前n行分别是点的坐标,第i行两个以空格分隔的数xi yi ,表示编号为i的点的坐标。
第n+1行,共n个以空格分隔开的整数。第i个数ri表示输入中第i个点的编号。
完整代码:
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int len,tmp=0;
int min_x,min_y;
cout<<"len:";
cin>>len;
vector<int> array_x(len);
vector<int> array_y(len);
vector<int> count(len);
for(int i=1;i<=len;i++){
cin>>array_x[i];
cin>>array_y[i];
count[i]=i;
}
for(int i=0;i<len;i++){
for(int j=0;j<len-i;j++){
if(array_x[j]>array_x[j+1]){
tmp = array_x[j];
array_x[j] = array_x[j+1];
array_x[j+1] = tmp;
tmp = array_y[j];
array_y[j] = array_y[j+1];
array_y[j+1] = tmp;
tmp = count[j];
count[j] = count[j+1];
count[j+1] = tmp;
}
}
}
cout<<endl;
for(int i=1;i<=len;i++){
cout<<array_x[i]<<" "<<array_y[i]<<endl;
}
cout<<endl;
for(int i=1;i<=len;i++){
cout<<count[i]<<" ";
}
return 0;
}
博主只用了冒泡排序的方法,可以选择其他更高效的算法替代