1、求数字 1~n 的全排列
import java.util.Scanner ;
public class Permutation{ //求数字 1~n 的全排列;
int[] array ;
int[] book ;
int n ;
public void permutation(int step){ // 深度优先搜索思想;
if (step==n+1) {
for (int i=1;i<=n;i++) {
System.out.print(array[i] + " ") ;
}
System.out.println() ;
}else{
for (int i=1;i<=n;i++) {
if (book[i]==0) {
array[step] = i ;
book[i] = 1 ;
permutation(step+1) ;
book[i] = 0 ;
}
}
}
}
public static void main(String[] args){ //测试;
Permutation p = new Permutation() ;
Scanner sc = new Scanner(System.in) ;
System.out.println("please input an integer:") ;
p.n = sc.nextInt() ;
p.array = new int[p.n+1] ;
p.book = new int[p.n+1] ;
p.permutation(1) ;
}
}
2、若 abc + def = ghi,其中,a~i 为数字 1~9,请给出满足条件的全部组合;
public class DepthFirstSearch{ //饱含深度优先搜索思想;
int[] array ;
int[] book ;
int n = 9 ;
int total ;
public void depthFirstSearch(int step){
if (step==n+1) {
if((array[1]+array[4]-array[7])*100+(array[2]+array[5]-array[8])*10+(array[3]+array[6]-array[9])==0){
total++ ;
for(int i=1;i<=n;i++){
System.out.print(array[i]) ;
if (i%3==0) {
System.out.print(" ") ;
}
}
System.out.println() ;
}
}else{
for(int i=1;i<=n;i++){ //深度优先搜索思想核心;
if(book[i]==0){
array[step] = i ;
book[i] = 1 ;
depthFirstSearch(step+1) ;
book[i] = 0 ;
}
}
}
}
public static void main(String[] args) { //测试;
DepthFirstSearch dfs = new DepthFirstSearch() ;
dfs.array = new int[dfs.n+1] ;
dfs.book = new int[dfs.n+1] ;
dfs.depthFirstSearch(1) ;
System.out.println(dfs.total/2) ;
}
}
3、最短路径
import java.util.Scanner ;
public class HelpHL{
static int[][] map ;
static int[][] book ;
static int min = 99999999 ;
static int p ;
static int q ;
static int m ;
static int n ;
public static void dfs(int x, int y, int step){
if (x!=p || y!=q) {
int[][] next = {{1,0},{-1,0},{0,1},{0,-1}} ; //四个方向;
for (int k=0;k<=3;k++) {
int newX = x + next[k][0] ;
int newY = y + next[k][1] ;
if (newX>=0 && newX<m && newY>=0 && newY<n) {
if (map[newX][newY]==0 && book[newX][newY]==0) {
book[newX][newY] = 1 ;
dfs(newX,newY,step+1) ;
book[newX][newY] = 0 ;
}
}
}
}else{
if(step<min){
min = step ;
}
}
}
public static void main(String[] args){
System.out.println("please input row(m) and column(n):") ;
Scanner sc = new Scanner(System.in) ;
m = sc.nextInt() ;
n = sc.nextInt() ;
map = new int[m][n] ;
book = new int[m][n] ;
System.out.println("please input destination (p,q):") ;
p = sc.nextInt() ;
q = sc.nextInt() ;
System.out.println("please input map barrier:") ;
for (int i=0;i<m;i++) {
for (int j=0;j<n;j++) {
map[i][j] = sc.nextInt() ;
}
}
System.out.println("please input initial position (startX,startY):") ;
int startX = sc.nextInt() ;
int startY = sc.nextInt() ;
dfs(startX,startY,0) ;
System.out.println("The minimum " + min + " steps") ;
}
}
原文:http://www.cnblogs.com/lshl/p/5926315.html