當前位置:編程學習大全網 - 編程軟體 - C語言 馬走日不重復遍歷中國象棋棋盤上每壹個位置點

C語言 馬走日不重復遍歷中國象棋棋盤上每壹個位置點

本著樂於助人以及自我鍛煉的原則,幫樓主敲了敲代碼,還有疑問的話請追問。

#include <stdio.h>

#include <memory.h>

typedef struct

{

int x, y;

}item;

item move[4] = {{-2,1}, {-1,2}, {1,2}, {2,1}};

int map[5][9], sx, sy;

//判斷是否在地圖中,防止越界

int checkIn(int x, int y)

{

if(x >= 0 && x <= 4 && y >= 0 && y <= 8)

return 1;

return 0;

}

//輸出最終結果

void output()

{

int i, j;

for(i = 0; i <= 4; i++)

{

for(j = 0; j <= 8; j++)

printf("%d ",map[i][j]);

putchar('\n');

}

printf("***計%d步。", map[0][8]);

}

//從x y開始尋找能否到達終點,能返回1,不能返回0,step表示當前的步數。

int findPath(int x, int y, int step)

{

int i;

map[x][y] = step;

//終點

if(x == 0 && y == 8)

{

output();

return 1;

}

//向右邊4個方向前進

for(i = 0; i < 4; i++)

if(checkIn(x+move[i].x, y+move[i].y))

if(findPath(x+move[i].x, y+move[i].y, step+1) == 1)

return 1;

//四個方向均無法到達終點,回溯並返回0

map[x][y] = 0;

return 0;

}

int main(int argc, char ** argv)

{

memset(map, 0, sizeof(map));

printf("請輸入起點<x,y>\n");

scanf("%d,%d", &sx, &sy);

findPath(sx, sy, 1);

return 0;

}

希望能夠幫助到妳,望采納!

  • 上一篇:影視多媒體技術是學什麽的
  • 下一篇:用2000線的增量式編碼器測速,S7-200PLC程序怎麽做
  • copyright 2024編程學習大全網