資源簡介
在n x n棋盤(有n x n個格點的棋盤)的某個格點上有一個中國象棋馬,馬走日字。求一條周游棋盤的路徑,使得馬能夠從起始位置起沿著該路徑每個格點恰好走一次最后回到出發位置。
用回溯法解決該問題。輸入一個正整數n,輸出一個解,解的輸出形式盡可能直觀。
代碼片段和文件信息
#include?“stdio.h“
int?mn;
char?**chess;
int?**?trip;
bool?check(int?iint??j)
{
if(i<0?||?i>=m?||?j<0?||?j>=n)?return?false;
if(chess[i][j]==‘w‘)??return?false;
if(chess[i][j]==‘1‘)??return?false;
return?true;
}
void?output(int?count?)
{
printf(“%d\n“count);
for(int?i=0;i {
for(int?j=0;j printf(“%4d“trip[i][j]);
printf(“\n“);
}
}
void?Walk(int?iint?jint?count)
{
//出口:i==m-1?&&?j==n-1
if(i==0?&&?j==0?&&?count==m*n)?
{
chess[i][j]=‘w‘;
trip[i][j]=++count;
output(count);
chess[i][j]=‘0‘;
trip[i][j]=0;
return;
}
//合法性判斷(出界,是否走過,是否故障)
if?(!check(ij))??return;
else
{
//記錄當前位置走過,步數
????count++;
???? chess[i][j]=‘w‘;
???? trip[i][j]=
- 上一篇:C++api大全
- 下一篇:VC++網絡考試系統,服務器+用戶端+數據庫+源代碼.
評論
共有 條評論