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