题目描述;
给你一个n*m的坐标方格,每次可以取一个向量(x1,y1)走,也就是每次可以走到(x+x1,y+y1)点,且每次不能去同一个向量;
问是否能走完途中的每一个点 不能输出 “-1” 能 按顺序输出每次走的位置;
1≤n⋅m≤10^6
先分析一维直线时,每次走对称的点向量值不同,由此可推得二维时每次走中心对称点向量值也不同,遍历下来复杂度就是O(n*m),(可以从题目看出时间复杂度来确定用某个算法)
#include<iostream>
#include<math.h>
#include<stdio.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n/2;i++){
for(int j=1;j<=m;j++){
printf("%d %d\n",i,j);
printf("%d %d",n-i+1,m-j+1);
printf("\n");
}
}
if(n&1){
int i=n/2+1;
for(int j=1;j<=m/2;j++)
{
printf("%d %d\n",i,j);
printf("%d %d\n",i,m-j+1);
}
if(m&1)printf("%d %d\n",n/2+1,m/2+1);
}
}

京公网安备 11010502036488号