所有的路口标号用int road[8]表示,
bool status[8][8]表示道路可否通行。

T字路口


T字路口
对于T字路口,将道路分为(左,右,下)三个流量出入口,存在的状态有:

0. 全红(特殊状态应对突发事故)

 for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
status[i][j] = false;
}
}
× 0 1 2 3 4 5
0 × × × × × ×
1 × × × × × ×
2 × × × × × ×
3 × × × × × ×
4 × × × × × ×
5 × × × × × ×

正常状态下考虑红灯可右转,同向变道不受交通灯控制,即永远可通行

status[2][1] = status[4][3] = true;
status[0][1] = status[2][3] = status[4][5] = true;
× 0 1 2 3 4 5
0 @
1
2 @ @
3
4 @ @
5

同时需要限制逆行,即永远不可通行

// 出口不能自转和变道
status[0][0] = status[0][2] = status[0][4] = false;
status[4][4] = status[4][0] = status[4][2] = false;
status[2][2] = status[2][0] = status[2][4] = false;
// 入口不能出去
status[1][0] =status[1][1] = status[1][2] = status[1][3] = status[1][4] = status[1][5] = false;
status[3][0] =status[3][1] = status[3][2] = status[3][3] = status[3][4] = status[3][5] = false;
status[5][0] =status[5][1] = status[5][2] = status[5][3] = status[5][4] = status[5][5] = false;
× 0 1 2 3 4 5
0 × @ × ×
1 × × × × × ×
2 × @ × @ ×
3 × × × × × ×
4 × × @ × @
5 × × × × × ×

对以上情况封装,即init()。后续应禁止对上值做任何改变。
即还有6*6-5-9-18=4个值

status[0][5],status[4][1],
status[2][5],status[0][3],

道路方向

1. 对边可通行(限制0左转,限制2左转)

status[0][5]=status[4][1]=true;
status[2][5]=status[0][3]=false;

2. 疏通右侧

status[0][5]=status[0][3]=true;
status[4][1]=status[2][5]=false;

3. 导向左侧

status[0][5]=status[2][5]=true;
status[4][1]=status[0][3]=false;

+字路口


+字路口
对于+字路口,将道路分为(左,右,上,下)四个流量出入口,存在的状态有:

0. 全红(同上)

× 0 1 2 3 4 5 6 7
0 × × × × × × × ×
1 × × × × × × × ×
2 × × × × × × × ×
3 × × × × × × × ×
4 × × × × × × × ×
5 × × × × × × × ×
6 × × × × × × × ×
7 × × × × × × × ×