这题没能拿满分,运行超时,因为我没有用动态规划,只是深搜+枚举,时间复杂度高
思路:深搜,出口条件为步数为三。
package 蓝桥;
import java.util.Scanner;
public class 网络寻路 {
static int map[][];
static int n,m;
static int visited[];
static int sum,h,flag;
static int p[]=new int[5];
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
n =sc.nextInt();
m =sc.nextInt();
visited=new int[n+1];
map =new int[n+1][n+1];
for(int i=0;i<m;i++) {
int t1=sc.nextInt();
int t2=sc.nextInt();
map[t1][t2]=1;
map[t2][t1]=1;
}
for(int i=1;i<=n;i++) {
flag=i;
dfs(i,0);
}
System.out.println(sum);
}
private static void dfs(int start,int step) {
if(step==3) {
for(int i=0;i<h-1;i++)
if(flag==p[i])
break;
else if(i==h-2 &&flag!= p[i]){
sum++;
}
}
else {
for(int i=1;i<=n;i++) {
if(visited[i]==0&&map[start][i]==1) {
visited[i]=1;
p[h++]=i;
dfs(i,step+1);
visited[i]=0;
h--;
}
}}
}
}