首页 > 学院 > 开发设计 > 正文

哈密顿回路

2019-11-06 07:45:36
字体:
来源:转载
供稿:网友
bool v[maxn];vector<int> ans;bool maze[maxn][maxn];void Hamilton(int n) {    ans.clear();    int s = 1 , t;    int i , j;    M(v);    for(i = 1; i <= n; ++i)    if(maze[s][i])        break;    t = i;    v[s] = v[t] = 1;    ans.pb(s);    ans.pb(t);    while(1) {        while(1) {            for(i = 1 ; i <= n ; ++i){                if(maze[t][i] && !v[i]) {                    ans.pb(i);                    v[i] = 1;                    t = i;                    break;                }            }            if(i > n) break;        }        reverse(all(ans));        swap(s , t);        while(1) {            for(i = 1; i <= n; ++i) {                if(maze[t][i] && !v[i]) {                    ans.pb(i);                    v[i] = 1;                    t = i;                    break;                }            }            if(i > n) break;        }        if(!maze[s][t]) {            for(i = 1; i <= ans.size() - 2; ++i) {                if(maze[ans[i]][t] && maze[s][ans[i + 1]])                    break;            }            i++;            t = ans[i];            reverse(ans.begin() + i , ans.end());        }        if(ans.size() == n)            return;        for(j= 1; j <= n; ++j) {            if(v[j]) continue;            for(i = 1; i < ans.size() - 2; ++i) {                if(maze[ans[i]][j]) break;            }            if(maze[ans[i]][j]) break;        }        s = ans[i - 1];        t = j;        reverse(ans.begin() , ans.begin() + i);        reverse(ans.begin() + i ,ans.end());        ans.pb(j);        v[j] = 1;    }    return;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表