咋不对
螺旋矩阵不对,就用递归的方法#include<stdio.h>
void lml(int n,int a,int num,int x,int y)
{
if(y<n-1&&a==0)
{
y++;
a=num++;
lml(n,a,num,x,y);
}
if(x<n-1&&a==0)
{
x++;
a=num++;
lml(n,a,num,x,y);
}
if(y>0&&a==0)
{
y--;
a=num++;
lml(n,a,num,x,y);
}
if(x>0&&a==0)
{
x--;
a=num++;
lml(n,a,num,x,y);
}
}
int main()
{
int n,i,j,c,d;
scanf("%d%d%d",&n,&i,&j);
int a,num=1;
for(c=0;c<n;c++)
{
for(d=0;d<n;d++)
{
a=0;
}
}
int x=0,y=0;
a=num++;
lml(n,a,num,x,y);
printf("%d",a);
return 0;
}
你的代码中有些地方有问题,让我来帮你修改一下。
首先,在 `lml` 函数中,你需要添加递归终止条件。当 `x` 和 `y` 的值都小于等于零时,递归结束。
其次,在递归调用 `lml` 函数之前,你需要分别判断当前位置的四种情况:向右、向下、向左和向上。根据当前的位置和方向,更新 `x` 和 `y` 的值,并将 `num` 加1。
最后,在 `main` 函数中,你需要调用 `lml` 函数,并传入初始值 `n`、`0`、`1`、`i` 和 `j`。
下面是修改后的代码:
#include <stdio.h>
void lml(int n, int a, int num, int x, int y) {
// 递归终止条件
if (x <= 0 && y <= 0) {
return;
}
// 向右
if (x >= y && x >= n - y - 1 && a == 0) {
y++;
a = num++;
lml(n, a, num, x, y);
}
// 向下
else if (x >= y && x > n - y - 1 && a == 1) {
x++;
a = num++;
lml(n, a, num, x, y);
}
// 向左
else if (x > y && x <= n - y - 1 && a == 2) {
y--;
a = num++;
lml(n, a, num, x, y);
}
// 向上
else if (x > y && x > n - y - 1 && a == 3) {
x--;
a = num++;
lml(n, a, num, x, y);
}
}
int main() {
int n, i, j;
scanf("%d%d%d", &n, &i, &j);
int a = 0, num = 1;
for (int c = 0; c < n; c++) {
for (int d = 0; d < n; d++) {
if (c == i && d == j) {
printf("%2d ", num);
} else {
printf("%2d ", 0);
}
}
printf("\n");
}
lml(n, a, num, i, j);
return 0;
}
希望这次的代码能够正常运行,并且输出所需的螺旋矩阵。如果还有其他问题,请随时提问。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页:
[1]