注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

云水居

云在青山水在天,人在江湖不得闲

 
 
 

日志

 
 

欧拉回路POJ2337  

2010-12-14 20:52:27|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

查看全文


#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct edge{int to, next,/*next e of the same v*/ id; bool visited;} e[1024];
int v[26], eNum, cd[26], rd[26], visited[26], path[26][26], ans[1024], ansI;
void insert(int from, int to, int id) {
    e[eNum].to = to, e[eNum].next = v[from];
    e[eNum].visited = 0;e[eNum].id = id;
    v[from] = eNum++;
}
char dict[1024][26];
int cmp(const void *pa, const void *pb){
    const char* a = (const char*)pa;
    const char* b = (const char*)pb;
    return -strcmp(a,b);
}
void dfs(int id) {
    visited[id] = true;
    for(int i = 0; i < 26; i++)
        if (!visited[i] && path[id][i])
            dfs(i);
}
int judge() {
    int num = 0, id = -1;
    //is there illegal vertex
    for(int i = 0; i < 26; i++)
        if (cd[i] - rd[i] == 1) {id = i; num++;}
        else if (rd[i] - cd[i] == 1) num++;
        else if (rd[i] - cd[i] > 1 || rd[i] - cd[i] < -1) return -1;
    if (num > 2) return -1;
    //if all even
    if (id == -1)
        for(int i = 0; i < 26; i++)
            if (cd[i] > 0){id = i; break;}
    memset(visited, 0, sizeof(visited));
    dfs(id);
    //*is there seperate part?
    for(int i = 0; i < 26; i++)
        if ((cd[i] != 0 || rd[i] != 0) && !visited[i]) return -1;
    return id;
}
void euer(int vid, int eid) {
    for(int i = v[vid]; i != -1; i = e[i].next)//foreach cd of vid.
        if (!e[i].visited) {
            e[i].visited = 1;
            euer(e[i].to, i);
        }
    if(eid >= 0)

查看全文

  评论这张
 
阅读(1220)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017