给出一个无向图,给出时间,问在时间范围内你最多能取走多少珠宝
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<string.h>
#include<cstring>
#include<string>
#include<map>
#include<set>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;
int ans[120];
#define sp system("pause")
#define mt(dp) memset(dp,0,sizeof dp)
class node
{
public:
int time,jnum,pos;
int vis[12];
node()
{
memset(vis,0,sizeof vis);
}
};
int ju[20];
int G[20][20];
int main()
{
int n,m,sum;
while(cin>>n>>m>>sum)
{
for(int i=0;i<=12;i++)
{
for(int j=0;j<=12;j++)
G[i][j]=9999999;
}
int start,en;
cin>>start>>en;
for(int i=0;i<n;i++)
cin>>ju[i];
for(int i=0;i<m;i++)
{
int x,y,tm;
cin>>x>>y>>tm;
G[x][y]=min(G[x][y],tm);
G[y][x]=min(G[y][x],tm);
}
int ans=0;
queue<node>q;
node s;
s.pos=start;
s.vis[start]=ju[start];
s.jnum=ju[start];
s.time=0;
q.push(s);
while(!q.empty())
{
node t=q.front();
q.pop();
if(t.pos==en)
{
ans=max(ans,t.jnum);
}
for(int i=0;i<n;i++)
{
if(t.time+G[t.pos][i]<=sum&&t.vis[i]!=0&&t.vis[i]<t.jnum)
{
node ne;
ne.jnum=t.jnum;
ne.pos=i;
memcpy(ne.vis,t.vis,sizeof t.vis);
ne.vis[i]=ne.jnum;
ne.time=t.time+G[t.pos][i];
q.push(ne);
}
if(t.time+G[t.pos][i]<=sum&&t.vis[i]==0)
{
node ne;
ne.jnum=t.jnum+ju[i];
ne.pos=i;
memcpy(ne.vis,t.vis,sizeof t.vis);
ne.vis[i]=ne.jnum;
ne.time=t.time+G[t.pos][i];
q.push(ne);
}
}
}
cout<<ans<<endl;
}
return 0;
}