Traffic Light

本文探讨了一种智能路径优化算法在解决复杂交通网络中的路径选择问题的应用。通过实现动态调整车辆行驶路线,减少拥堵和提高通行效率,该算法在实际交通网络中展现出显著效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>

#define JUNCTIONS 301

#define INF 999999

typedef struct _state{

char color;

int remains;

int tb;

int tp;

bool marked;

} state;

state js[JUNCTIONS];

int roads[JUNCTIONS][JUNCTIONS];

int n,m;

int s,t;

int d[JUNCTIONS];

using namespace std;

state curstate(int k,int laps){

state rs;

int t = 0;

rs = js[k];

if(!laps) return rs;

if(laps < rs.remains) {

rs.remains -= laps;

}else{

t = laps - rs.remains;

t = t % (rs.tb+rs.tp);

if(rs.color == 'P'){

if(t>=0 && t< rs.tb)

rs.color = 'B';

else

rs.color = 'P';

}else{

if(t>=0 && t< rs.tp)

rs.color = 'P';

else

rs.color = 'B';

}

if(rs.color == 'P') rs.remains = rs.tp - t;

else rs.remains = rs.tb - t;

}

return rs;

}

int wait(state &a,state &b){

if(a.color == b.color) return 0;

else{

if(a.remains != b.remains) return a.remains > b.remains? b.remains:a.remains;

else{

if(a.color == 'B'){

if(a.tp != b.tb) return a.tp > b.tb? b.tb:a.tp;

else{

if(a.tb != b.tp) return a.tb > b.tp? b.tp:a.tb;

else{

return INF;

}

}

}else{

if(a.tb != b.tp) return a.tb > b.tp? b.tp:a.tb;

else{

if(a.tp != b.tb) return a.tp > b.tb? b.tb:a.tp;

else{

return INF;

}

}

}

}

}

return -1;

}

 

void main(){

int i,j,k,l,tmp,lasp,w;

state ss,se;

 

cin>>s>>t;

cin>>n>>m;

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

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

roads[i][j] = INF;

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

d[i] = INF;

 

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

state tmp;

cin>>tmp.color>>tmp.remains>>tmp.tb>>tmp.tp;

tmp.marked = false;

js[i] = tmp;

}

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

cin>>j>>k;

cin >> roads[j][k];

}

d[s] = 0;

js[s].marked = true;

k=s;//标志每一步的源点

//laps = 0; 

for(;;){

if(k == t) break;

ss = curstate(k,d[k]);//得到源点的状态

l = INF;

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

if(!js[i].marked){

se = curstate(i,d[k]);//得到i点的状态

w = wait(ss,se);//计算等待时间

if(d[i] > d[k] + roads[k][i] + w){

d[i] = d[k] + roads[k][i] + w;

}

if(l > d[i]){

l = d[i];

tmp = i;

}

}

}

k = tmp;

js[k].marked = true;

}

printf("%d",d[t]);

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值