做任务的电脑网站,wordpress 备份还原,慧聪网网站建设策略,企业网站建设网页题目描述
要考试了#xff0c;小明需要去图书馆挑选一个座位来复习。小明需要找到一个位置#xff0c;这个位置应距离任何已经落座的人尽可能的远#xff08;即与最近的人的距离尽可能的大#xff09;。
图书馆的座位为一个N*M的矩阵#xff0c;N表示总的排数#xff0…题目描述
要考试了小明需要去图书馆挑选一个座位来复习。小明需要找到一个位置这个位置应距离任何已经落座的人尽可能的远即与最近的人的距离尽可能的大。
图书馆的座位为一个N*M的矩阵N表示总的排数M表示每一排的座位数。元素0表示此座位没有人落座1表示有人落座。
当有多个座位满足要求时小明优先挑选的位置依照优先级应
N尽可能的小当N一致时M尽可能的小
输入
第一行输入两个整数N和M分别表示排数和每一排的座位数
接下来的N行每行M个数字其中0表示无人坐此位置1表示有人坐此位置。
输出
两个整数分别表示选择座位的排数和列数从0开始
样例输入
3 5 0 0 0 0 0 0 0 1 0 1 0 0 1 0 0
代码实现
#include iostream
#include vector
#include cmath
#include climitsusing namespace std;int findMax(const vectorvectorint member, int x, int y)
{int n member.size();int m member[0].size();int minlength 99999;for (int i 0; i n; i) {for (int j 0; j m; j) {if (member[i][j] 1) {int length abs(i - x) abs(j - y);if (length minlength) {minlength length;}}}}return minlength;
}pairint, int findBest(const vectorvectorint member)
{int n member.size();int m member[0].size();int maxXY -1;pairint, int bestxy {-1, -1};for (int i 0; i n; i) {for (int j 0; j m; j) {if (member[i][j] 0) {int length findMax(member, i, j);if (length maxXY) {maxXY length;bestxy {i, j};} else if (length maxXY) {if (i bestxy.first){bestxy {i, j};} else if (i bestxy.first) {if (j bestxy.second) {bestxy {i, j};}}}}}}return bestxy;
}int main() {vectorint vTtemp;vectorvectorint member;int n,m;int temp;std::cinnm;for(int i 0; i n; i){for(int j 0; j m; j){std::cintemp;vTtemp.push_back(temp);}member.push_back(vTtemp);vTtemp.clear();}pairint, int bestxy findBest(member);cout bestxy.first bestxy.second endl;return 0;
}