发布网友 发布时间:2022-04-21 21:06
共3个回答
热心网友 时间:2023-11-03 05:12
//这个问题的思路就是按规则走格子问题
//好比人物在一个5*5的房间里要走遍所有的位子
//规则如下:
//不走回头路
//不到万不得已不改变方向
//改变方向的次序为东>南>西>北
#include "stdafx.h"
#define R_WIDTH 7
#define R_HEIGTH 7
enum ROOM_DIR{
DIR_E=0,
DIR_S,
DIR_W,
DIR_N
};
typedef struct {
int x;
int y;
int dir;
} person_state_t;
int g_xofset[]={0,1,0,-1};
int g_yofset[]={1,0,-1,0};
char g_map[R_WIDTH][R_HEIGTH];
int g_step_num=1;
void init_room();
int print_map();
int step_one( person_state_t in_s,person_state_t *out_s );
int get_next_dir_val(person_state_t s,int dir);
int next_dir(int dir);
int main(int argc, char* argv[])
{
person_state_t cur_state,next_state;
int ret;
cur_state.x=1;
cur_state.y=1;
cur_state.dir=DIR_E;
init_room();
print_map();
while (1) {
ret = step_one(cur_state,&next_state);
if (ret !=0 ) {
break;
}
cur_state = next_state;
print_map();
}
print_map();
return 0;
}
int step_one( person_state_t in_s,person_state_t *out_s )
{
int cur_dir;
g_map[in_s.x][in_s.y]=g_step_num++;
if ( (get_next_dir_val(in_s,DIR_E)!=0) &&
(get_next_dir_val(in_s,DIR_S)!=0) &&
(get_next_dir_val(in_s,DIR_W)!=0) &&
(get_next_dir_val(in_s,DIR_N)!=0)
) {
return 1;
}
cur_dir = in_s.dir;
while (1) {
if ((get_next_dir_val(in_s,cur_dir)==0)) {
out_s->x = in_s.x+g_xofset[cur_dir];
out_s->y = in_s.y+g_yofset[cur_dir];
out_s->dir = cur_dir;
break;
}
cur_dir = next_dir(cur_dir);
}
return 0;
}
int get_next_dir_val(person_state_t s,int dir)
{
return g_map[s.x+g_xofset[dir]][s.y+g_yofset[dir]];
}
int next_dir(int dir)
{
if (dir==DIR_N) {
dir = DIR_E;
}else{
dir++;
}
return dir;
}
int print_map()
{
int i,j;
printf("========================\n");
for (i=0;i<R_WIDTH;i++) {
for (j=0;j<R_HEIGTH;j++) {
printf("%02d ",g_map[i][j]);
}
printf("\n");
}
printf("=======================\n\n");
return 0;
}
void init_room()
{
int i,j;
for (i=0;i<R_WIDTH;i++) {
for (j=0;j<R_HEIGTH;j++) {
if (i==0 || i==R_WIDTH-1 || j==0 || j==R_HEIGTH-1 ) {
g_map[i][j]=-1;
}else{
g_map[i][j]=0;
}
}
}
}
热心网友 时间:2023-11-03 05:12
#include<stdio.h>
main()
{
printf("1 2 3 4 5"\r\t);
printf("16 17 18 19 6"\r\t);
printf("15 24 25 20 7"\r\t);
printf("14 23 22 21 8"\r\t);
printf("13 12 11 10 9"\r\t);
}
热心网友 时间:2023-11-03 05:13
1 2 3 4 5
包括在里面么?