方向数组3
题目描述 问题同 “方向数组1”,区别在于本题需要模仿 “马走日” 的 8 个位置,输出顺序与位置如下图所示。 输入格式 第一行两个正整数
m 和 n,行号从上往下编号为 1 ∼ ∼
m,列号从左往右编号为 1 ∼ ∼
n。
第二行一个正整数 T,为要查询的位置数量。
接下来 T 行,每行两个数 (,) (i,j),为要查询位置的行号 i 与列号 j。
其中, 1≤1001≤m≤n≤100 。
输出格式 输出共 T 行,每行若干组数据,依次为 (i,j) 的上下左右八个位置,格式按 (x,y) 的形式输出(参见样例),中间没有任何空格。
注意:如果某个位置在矩阵之外(越界),则不输出。 样例输入 3 4 2 1 1 2 2 样例输出 #1 (2,3)(3,2) (1,4)(3,4) 样例输入 #2 10 10 1 5 5 样例输出 #2 (4,3)(3,4)(3,6)(4,7)(6,7)(7,6)(7,4)(6,3)
我的代码:
#include <bits/stdc++.h>
using namespace std;
int dx[17] = {-2, -2, -1, 1, 2, 2, 1, -1};
int dy[17] = {-1, 1, 2, 2, 1, -1, -2, -2};
int main()
{
int m,n,t,x,y;
cin>>m>>n;
cin>>t;
while(t--)
{
cin>>x>>y;
for(int i=0;i<8;i++)
{
int nx=x+dx[i];
int ny=y+dy[i];
if(nx>=1&&nx<=m&&ny>=1&&ny<=n)
{
printf("(%d,%d)",nx,ny);
}
}
cout<<endl;
}
return 0;
}