做题目做久了之后就会发现,算法是有格式的。
一、深度优先算法
public static void find(String s,int i)
{//先保存上一次的相关状态
String temp=s;
//判断是否符合条件
if(s.length()==n)
{
System.out.println(s);
return;
}
//一个循环
for(int k=i;k<str.length();k++)
{
temp+=str.charAt(k);
find(temp,k+1);
temp=s;//恢复上一次的相关状态
}
}
二、广度优先算法
public static void find(String str)
{
LinkedList<String> link=new LinkedList<String>();
link.add(str);// 入队
while(link.size()>0)
{
//出队
String temp=link.poll();
//判断是否符合条件
if(temp.length()==5)
{
return;
}
//然后遍历所有的情况并且入队
//...
//...
//...
//....
}
}
三、组合的算法
public class zuhe {
private static int n=3;
private static String str="ABCDE";
public static void main(String[] args) {
find("",0);
}
public static void find(String s,int i)
{
String temp=s;
if(s.length()==n)
{
System.out.println(s);
return;
}
for(int k=i;k<str.length();k++)
{
temp+=str.charAt(k);
find(temp,k+1);//不加1就是可以重复的
temp=s;
}
}
}
四、全排列的算法
public class pailie {
public static void main(String[] args) {
String str="123456";
char c[]=str.toCharArray();
find(c,1);
}
public static void find(char [] c,int start)
{
if(start==c.length-1)
{
for (int i = 0; i < c.length; i++) {
System.out.print(c[i]+" ");
}
System.out.println();
return ;
}
for(int k=start;k<c.length;k++)
{
char temp=c[start];
c[start]=c[k];
c[k]=temp;
find(c,start+1);
c=cc;
temp=c[k];
c[k]=c[start];
c[start]=temp;
}
}
}