题目链接
本来想用BFS做的。发现还挺有难度的,首先这是一个很大的图,而且还要来求最短哈密顿路径,用BFS确实有点蛋疼。
看到这图我就想起了以前离散数学学的七桥问题,只可惜书没带回家,就只能上百度搜索了。发现,这不是七桥问题,而应该说是最短哈密顿图问题。
然后发现了这么一个公式:
如果n、m中有一个为偶数,则结果为n*m
否则为n*m-1+sqrt(2)。
只可惜找了好久也没找到公式的推到方法。没办法,先用着吧。
有了公式下面的代码就特别好写了:
#include <iostream> #include <cmath> using namespace std; int main() { int t, n, m; double res; cin >> t; for (int i = 1; i <= t;i++) { cin >> n >> m; if (n % 2 && m % 2) { res =(double)( n*m - 1 + sqrt(2.0)); //sqrt(double X)所以这里要用2.0否则杭电编译器过不了 } else res = (double) (n*m); printf("Scenario #%d:\n", i); printf("%.2lf\n\n", res); } return 0; }