跳马问题
#include<stdio.h>
int dx[4]={1, 1,2, 2};
int dy[4]={2,-2,1,-1};
int m, n,ii,minc=99999;
void dfs(int,int,int);
int main()
{
printf("input m n:\n");
scanf("%d %d",&m,&n);
dfs(1,1,1);
printf("%d %d\n",ii,minc);
return 0;
}
void dfs(int x,int y,int c)
{
for(int i=0;i<4;i++ )
{
if(x+dx[i]>0 && x+dx[i]<=m && y+dy[i]>0 && y+dy[i]<=n)
{
if(x+dx[i]==m && y+dy[i]==n)
{
minc=minc>c?c:minc;
ii++;
}
else
dfs(x+dx[i],y+dy[i],c+1);
}
}
}
八皇后问题
#include<iostream>
using namespace std;
int Queens[8],sum;
void Output()
{
int i,j;
cout<<" 第"<<++sum<<"种方案:"<<endl;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(Queens[i]==j)
cout<<"★ ";
else
cout<<"□ ";
}
cout<<endl<<endl;
}
}
int Isvalid(int n)
{
int i;
for(i=0;i<n;i++)
{
if(Queens[i]==Queens[n])
return 0;
if(abs(Queens[i]-Queens[n])==(n-i))
return 0;
}
return 1;
}
void Queen(int n)
{
int i;
if(n==8)
{
Output();
return;
}
for(i=0;i<8;i++)
{
Queens[n]=i;
if(Isvalid(n))
Queen(n+1);
}
}
int main()
{
cout<<"八皇后排列方案"<<endl;
Queen(0);
getchar();
return 0;
}