题目描述;
给你一个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);
    }

}