¡Urgente! ¡Matriz cuadrada de serpiente en lenguaje C!
#include "conio.h"
#include
#include
# definir N 6
int mDir[4][2]={ {1,0},{-1,1},{0,1},{1,-1} }; Direcciones de llenado: izquierda, abajo a la izquierda, abajo, arriba a la derecha, llenado secuencial
void StepOn(int x,int y,int s[N][N],int len)
{ int i,j,d=0,n=0,begin=1;
mientras ( 1 )
{ si ( s[y][x]==0 )
{ n++; s[y][x]=n;
if ( start ) begin=0; //El punto de partida no se cuenta
else if ( ( d==0||d==2) ) d=(d+1)%4; //Si la dirección actual es hacia la izquierda o hacia abajo, gire inmediatamente
}
else //No está vacío
{ for ( i=0;i<4;i++ ) //Prueba 4 direcciones secuencialmente
if ( x+mDir[(d +i)% 4][0] && y+mDir[(d+i)%4][1]>=0 ) //No se puede exceder el rango de la matriz if ( s[y+mDir[( d+i)%4] [1]][x+mDir[(d+i)%4][0]]==0 ) //Vacante legal encontrada { d=(d+ i)%4; x+= mDir[d][0]; y+=mDir[d][1]; //Modifica las coordenadas actuales y la dirección de viaje if ( i>= 4 ) break; //4 direcciones No se puede encontrar espacio, fin } } } void main() { int s[N][N]={0},i,j; StepOn(0,0,s,N); para ( i=0;i< N;i++ ) { para ( j=0;j getch (); } La idea de diseño de este programa es: mantener la dirección de llenado actual si hay una vacante en la dirección. de viaje, llénelo si cruza el límite o llena la dirección vertical u horizontal o si cruza el límite, girará inmediatamente hasta que se hayan probado todas las direcciones y no quede espacio. El método de (d+i)%4 se utiliza en el programa para probar varias direcciones en el orden de la dirección actual d. No sólo mantiene la dirección actual sino que también prueba todas las direcciones no probadas.