(1)
〖算法流程〗 1 、数据初始化; 2 、递归填数:
判断第 J 种可能是否合法;
A 、如果合法:填数;判断是否到达目标( 20 个已填完):是,打印结果;不是,递归填下一个;
B 、如果不合法:选择下一种可能;
(2)
分析:如图 ( b ) , 马最多有四个方向,若原来的横坐标为 j 、纵坐标为 i, 则四个方向的移动可表示为:
1 : ( i,j )→( i+2,j+1 ); (i<3,j<8)
2: ( i,j )→( i+1,j+2 ); (i<4,j<7)
3: ( i,j )→( i-1,j+2 ); (i>0,j<7)
4: ( i,j )→( i-2,j+1 ); (i>1,j<8)
搜索策略:
S1:A[1]:=(0,0);
S2: 从 A[1] 出发,按移动规则依次选定某个方向,如果达到的是( 4,8 )则转向 S3, 否则继续搜索下一个到达的顶点;
S3: 打印路径。
源程序
(1)
#include <iostream> //HDU 1016 DFS 素数环
#include<string.h>
using namespace std;
int a[21]={
1},n,used[21]; //a[0] 永远为1
int f(int n) //判断是否为素数
{
for(int i=2;i<=n-1;i++)
if(n%i==0)return 0;
return 1;
}
void dfs