/*
這題題意:告訴起點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,如果能 求最少的時間 ...