HDU 2653 BFS 優先佇列

2021-06-19 01:31:23 字數 1127 閱讀 8069

/*

這題題意:告訴起點y的位置,然後告訴終點l的位置,然後輸入 n, m, t ,p,其中 n和m是代表行和列,而t

是時間,p代表能量,如果在t範圍內沒有找到l的話,就失敗了,如果在t範圍內找到了l,那麼求出最少步數,

.代表空地,可以走路過去,也可以飛過去,#代表不能走路過去,也不能飛過去,而@代表的是可以飛過去,但不能

走路過去,所以要廣搜的同時要用到優先佇列,

解題思路:

bfs+優先佇列

我們可以先判斷能不能飛過去,因為飛過去用的步數少,然後再考慮能不能走路過去

走路過去的條件是,沒有走過,然後當前所在的位置和即將要走的位置不能是『@』,不然

走下去根本沒有意義

*/#include #include #include #include #include using namespace std;

const int n=85;

int n,m,t,p;

char s[n][n];

int dir[4][2]= ,,,};

bool visit[n][n][n];

struct node

};node start;

int bfs(int x,int y)

if(s[cur.x][cur.y]!='@'&&s[next.x][next.y]!='@'&&!visit[next.x][next.y][cur.pow]) }}

return -1;

}int main()

}if(flag)break;

}memset(visit,0,sizeof(visit));

int num;

num=bfs(start.x,start.y);

printf("case %d:\n",++tcase);

if(num==-1)

printf("poor yifenfei, he has to wait another ten thousand years.\n");

else

printf("yes, yifenfei will kill lemon at %d sec.\n",num);

}return 0;

}

hdu1242 BFS 優先佇列

這道題的最短路線不一定是最優路線,所以bfs時用到優先佇列,並加入判斷條件 只有比之前用時少的路線可以被加入佇列,所以就不用標記經過的節點了。ac include include include include include include using namespace std char ch ...

HDU 1180 優先佇列 bfs

判斷當前的方向和梯子的方向是否一致,如果一致則可以通行,否則需要在原地等待一分鐘。開始考慮是否需要記錄當前的方向,其實只需要判斷當前的座標與上一步座標之間的關係,即可知道當前的方向與之前方向之間的關係即可,這個題做了好久啊。include include include include using ...

HDU 1242 bfs優先佇列

angel所在的位置是a angel的朋友用r表示,angel可能有多個朋友 也就是可能有多個r 表示牆 x表示警衛 可能會有多個警衛 angel的朋友要進入a 只能上下左右的走,每走乙個格用乙個單位時間,如果遇上警衛,殺掉警衛要花乙個單位時間 問angel能否救到angel,如果能 求最少的時間 ...