写了一段时间的HDU上的搜索,现在回来写这道PAT上的,顿时觉得PAT上的难度确实是要小一些的,但是这里暴露了自己的问题,以前都不怎么用宏定义,在这里心血来潮用了一次,一直报错但是一直没找到问题,这里要提醒自己,宏定义常量的时候后面不要加;
#include<stdio.h>
#include<string.h>
#define MAX1 999
int start,ends,n,m,visit[505],map[505][505],len[505],s,e,d,count,maxLen,maxDis;
void dfs(int st,int dis,int sLen){
if(st == ends){
if(dis < maxLen){
count = 1;
maxLen = dis;
maxDis = sLen;
}
else if(dis == maxLen){
count++;
if(maxDis < sLen)
maxDis = sLen;
}
return ;
}
if(dis > maxLen) return ;
for(int i = 0;i<n;i++){
if(visit[i] == 0 && map[st][i] != MAX1){
visit[i] = 1;
dfs(i,dis+map[st][i],sLen+len[i]);
visit[i] = 0;
}
}
}
int main(){
count = 0;
maxLen = MAX1;
scanf("%d %d %d %d",&n,&m,&start,&ends);
memset(visit,0,sizeof(visit));
for(int i = 0;i<n;i++)
scanf("%d",&len[i]);
for(int i = 0;i<n;i++)
for(int j = 0;j<n;j++)
map[i][j] = MAX1;
while(m--){
scanf("%d %d %d",&s,&e,&d);
map[s][e] = map[e][s] = d;
}
dfs(start,0,len[start]);
return 0;
}