前几天帮朋友写一个类孔明棋的算法,
上题
5*5的棋盘 .表示没棋子 o表示有棋子
如: ooooo
ooooo
oo.oo
ooooo
ooooo
走法和孔明的走法一样
开始直接就是一个深搜 没有用数据结构 用的数组
#include<stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
char data[5][5]; //棋盘
int tag; //记录棋盘上有多少个棋子
int n=0; //记录方案个数
int scheme [25][4];
int code; //记录数据
int path(int z){ //递归还原数据 加输出数据
if(z==0){ //递归结束的条件
for(int i=0;i<5;i++){
for(int j=0;j<5;j++)
printf("%c",data[i][j]);
printf("\n");
}
printf("\n");
}
else{
data[(scheme[z][0]+scheme[z][2])/2][(scheme[z][1]+scheme[z][3])/2]='o';
data[scheme[z][0]][scheme[z][1]]='o';
data[scheme[z][2]][scheme[z][3]]='.';
path(z-1); //递归 上面是还原数据 下面是移动棋子
data[(scheme[z][0]+scheme[z][2])/2][(scheme[z][1]+scheme[z][3])/2]='.';
data[scheme[z][0]][scheme[z][1]]='.';
data[scheme[z][2]][scheme[z][3]]='o';
for(int i=0;i<5;i++){
for(int j=0;j<5;j++)
printf("%c",data[i][j]);
printf("\n");
}
printf("\n");
}
}
int dfs(int x,int y,int z){ //深搜
if(tag==1) {
n++; //记录可行个数
path(z-1); // 初步输出棋盘
/*