社区讨论
(70分)第 8, 9, 10 错了的可以看一下
P1126[CERC1996] 机器人搬重物参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mi6gv7my
- 此快照首次捕获于
- 2025/11/20 04:40 4 个月前
- 此快照最后确认于
- 2025/11/20 04:40 4 个月前
如果BFS的框架大概是这样的:
CPP/*
0
1 3
2
*/
bool vis[MAXN][MAXN][4];
bool stable(int x, int y);//判断x,y是否可以走
struct state
{
int t;
int x,y,fr;
};//fr表示面对的方向
void BFS()
{
Q[qe++] = T0;
vis[T0.x][T0.y][T0.fr] = true;
while( qs < qe )
{
state T = Q[qs++];//tasks:
vis[T.x][T.y][T.fr] = true;//这里有问题...
//如果在出队的时候判断是否已经访问过,
//在后3个点会出现把一个相同的状态多次压进队列的状况
if(T.x == di && T.y == dj)
{cout<<T.t; return;}
if( T.fr == 0 )
{
state R = T;
R.x--;
/*....*/
正确的做法是在压入队列之前先判断是否已经访问过了
CPP if(stable(R.x, R.y) )
{
if( !vis[R.x][R.y][R.fr] )
{vis[R.x][R.y][R.fr] = true; Q[qe++] = R;}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...