Floyd算法+DFS,为什么会内存超限呢?

365体育推荐 📅 2026-07-13 23:08:52 ✍️ admin 👁️ 5870 ❤️ 926
Floyd算法+DFS,为什么会内存超限呢?

对于点到点的最短距离,使用Floyd算法来求解,因为只有10个询问点所以dfs是可以解决的,对于题目所有的数据都需要数组来储存,这是正常的吧,dfs所要使用的数组就是vis标记数组了,为什么还会内存超限呢?

救救我,救救我,救救我……

#include

#define ll long long

using namespace std;

const int N=400+5;

const int mod=1e9+7;

int dis[22][22];

struct node{

int s,e;

int l,r;

}w[12];

int n,m,q,ans;

int vis[12];

inline void dfs(int x,int now,int cnt)

{

ans=max(ans,cnt);

// printf("x=%d now=%d cnt=%d \n",x,now,cnt);

for(int i=1;i<=q;i++)

{

int y=w[i].s;

int next=w[i].e;

if(now + dis[x][y]<= w[i].l)

{

int len=now + dis[x][y]+(w[i].l-(now + dis[x][y]));

if(len+dis[y][next]<=w[i].r)

{

vis[i]=1;

dfs(next,len+dis[y][next],cnt+1);

vis[i]=0;

}

}

else

{

int len=now + dis[x][y];

if(len+dis[y][next]<=w[i].r)

{

vis[i]=1;

dfs(next,len+dis[y][next],cnt+1);

vis[i]=0;

}

}

}

return ;

}

int main()

{

memset(dis,0x3f,sizeof(dis));

scanf("%d%d%d",&n,&m,&q);

for(int i=1;i<=m;i++)

{

int x,y,w;

scanf("%d%d%d",&x,&y,&w);

dis[x][y]=dis[y][x]=w;

}

for(int k=1;k<=n;k++)

{

dis[k][k]=0;

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

if(dis[i][j]>dis[i][k]+dis[k][j])

dis[i][j]=dis[i][k]+dis[k][j];

}

for(int i=1;i<=q;i++)

scanf("%d%d%d%d",&w[i].s,&w[i].e,&w[i].l,&w[i].r);

dfs(1,0,0);

printf("%d\n",ans);

return 0;

}

相关推荐

宫口开四指多久能生
365体育推荐

宫口开四指多久能生

📅 11-19 👁️ 6748
旺旺分流怎么设置,如何设置账号分流?
365体育推荐

旺旺分流怎么设置,如何设置账号分流?

📅 11-30 👁️ 2162