HDU 1180 詭異的樓梯

2021-06-16 21:41:58 字數 2532 閱讀 3191

題意:題意應該很好理解,就是從s到t的最少步數,只是加了乙個樓梯。

思路:一看就是廣搜,找最少的步數,harry只能每次走到相鄰的格仔而不能斜走,每移動一次恰好為一分鐘,並且harry登上樓梯並經過樓梯到達對面的整個過程只需要一分鐘,harry從來不在樓梯上停留.並且每次樓梯都恰好在harry移動完畢以後才改變方向.所以每次走到樓梯時特判一下,遵循奇變偶不變的原則,可以走過去,就只花一分鐘,不能走過去,則花兩分鐘。除了樓梯,每次走過的點被標記。一遍bfs就能得出答案。

這是自己的,有點麻煩:

#include#include#include#includeusing namespace std;

struct node;

int n,m,fx,fy,ex,ey;

int dx[4]=;

int dy[4]=;

bool vis[30][30];

char str[30][30];

void bfs()

if(p.x<1||p.x>n||p.y<1||p.y>m)

continue;

for(i=0;i<4;i++)

}else if(q.x==p.x&&q.count%2==0)

} else if(q.y==p.y&&q.count%2==0)

} else if(q.y==p.y&&q.count%2!=0)

}

}else if(str[q.x][q.y]=='-')

}else if(q.x==p.x&&q.count%2!=0)

}

else if(q.y==p.y&&q.count%2!=0)

}else if(q.y==p.y&&q.count%2==0)

}

}else if(str[q.x][q.y]=='.'&&!vis[q.x][q.y]) }}

}int main()

else if(str[i][j]=='t') }}

memset(vis,false,sizeof(vis));

bfs();

}return 0;

}

這是別人ac**,但是又錯誤,卡資料過的,考慮不完全,當時一直在想那個加2是怎麼來的:

#include#include#include#includeusing namespace std;

struct node;

int n,m,fx,fy,ex,ey;

int dx[4]=;

int dy[4]=;

bool vis[30][30];

char str[30][30];

void bfs()

for(i=0;i<4;i++)

if(str[q.x][q.y]=='-'&&(p.count%2)==0||str[q.x][q.y]=='|'&&(p.count%2)==1)

}else

} if(str[q.x][q.y]=='|'&&(p.count%2)==0||str[q.x][q.y]=='-'&&(p.count%2)==1)

}else

}

} }}

// printf("0\n");

}int main()

else if(str[i][j]=='t') }}

memset(vis,false,sizeof(vis));

bfs();

}return 0;

}

這是我根據上面改的:

#include#include#include#includeusing namespace std;

struct node;

int n,m,fx,fy,ex,ey;

int dx[4]=;

int dy[4]=;

bool vis[30][30];

char str[30][30];

void bfs()

for(i=0;i<4;i++)

if(str[q.x][q.y]=='-'&&(p.count%2)==0||str[q.x][q.y]=='|'&&(p.count%2)==1)

}else

} }

if(str[q.x][q.y]=='|'&&(p.count%2)==0||str[q.x][q.y]=='-'&&(p.count%2)==1)

}else

} }

} }

} // printf("0\n");

}int main()

else if(str[i][j]=='t') }}

memset(vis,false,sizeof(vis));

bfs();

} return 0;

}

HDU 1180 詭異的樓梯

bfs問題。題意是說爬樓梯的時候,有些樓梯是 有些是 而且每隔一分鐘就互相變化形態。只能上下,只能左右。爬樓梯的過程中,會變的樓梯不能停留,其他的可以停留。爬樓梯需要乙個單位時間,假如是 表明乙個單位時間從它左邊到它右邊或者 右邊到左邊。樓梯停留多次沒有意義,特殊樓梯只有2種旋轉狀態,多乙個wait...

hdu 1180 詭異的樓梯

要注意,雖然樓梯有時不能過,但是我們可以在樓梯前等一下,等到樓梯達到我們需要的狀態時再過,其實不用優先佇列也是可以的.具體自己去想吧.好久沒寫這麼長的 了 include include includeint m,n int tx,ty,sx,sy int visit 21 21 int dir 4...

HDU 1180 詭異的樓梯

problem description hogwarts正式開學以後,harry發現在hogwarts裡,某些樓梯並不是靜止不動的,相反,他們每隔一分鐘就變動一次方向.比如下面的例子裡,一開始樓梯在豎直方向,一分鐘以後它移動到了水平方向,再過一分鐘它又回到了豎直方向.harry發現對他來說很難找到能...