33,311
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
int a[501][501];
int book[501] = {0};
int num[501] = {0};
int r[501];
int result[501];
int min=99999;
int n, m, s, d,t=1,sum=0,temp=0;
void dfs(int cur,int dis)
{
int j,i;
//if(dis>min)
// return;
if(cur==d){
if(dis<=min)
{
if(dis==min)
t++;
if(temp>sum || dis<min){
sum = temp;
i = s;
do{
result[i] = r[i];
i = r[i];
}while(i!=d);
}
min=dis;
}
return;
}
for (j = 0; j < n; j++)
{
if (a[cur][j] != 99999 && a[cur][j]!=0 && book[j] == 0)
{
book[j] = 1;
temp += num[j];
r[cur] =j;
dfs(j, dis + a[cur][j]);
book[j] = 0;
temp -= num[j];
}
}
return;
}
int main()
{
int i,j,k,t1,t2,t3;
scanf("%d%d%d%d", &n, &m, &s, &d);
for (i = 0; i <n;i++)
scanf("%d", &num[i]);
for(i=0;i<n;i++)
for (j = 0; j < n;j++)
if(i==j)
a[i][j] = 0;
else
a[i][j] = 99999;
for (k = 0; k < m; k++){
scanf("%d%d%d", &t1, &t2, &t3);
a[t1][t2] = t3;
}
book[s] = 1;
temp = num[s];
dfs(s, 0);
printf("%d %d\n", t,sum);
i = s;
printf("%d", s);
do{
if(i!=n)
printf(" ");
printf("%d", result[i]);
i = result[i];
} while (i != d);
getchar();
getchar();
return 0;
}