首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

图论之Havel定律 Frogs' Neighborhood (青蛙的邻居)

2013-03-21 
图论之Havel定理 Frogs Neighborhood (青蛙的邻居)Havel定理 就是图的可判定性。今天刚学的,不多说了,大家g

图论之Havel定理 Frogs' Neighborhood (青蛙的邻居)

Havel定理 就是图的可判定性。今天刚学的,不多说了,大家google一下就懂了。

http://poj.org/problem?id=1659


#include <stdio.h>#include <iostream>#include <algorithm>#include <string.h>using namespace std;//由于要排序,需要用结构体保存节点的 下标typedef struct node{int index;int f; //邻居个数}Node;//比较函数。从大到小排序bool cmp(const Node n1,const Node n2){return n1.f > n2.f;}//打印图void print_map(int arr[10][10],int m){for(int i=0; i<m; i++){for(int j=0; j<m; j++){if(j)cout <<  " "<<arr[i][j] ;elsecout <<arr[i][j];}cout << endl;}}Node nodes[10];int map[10][10];int main(){int n,m;scanf("%d",&n);while(n--){scanf("%d",&m);memset(map,0,sizeof(map)); //初始化为0for(int i=0; i<m;i++){scanf("%d",&nodes[i].f);nodes[i].index = i;}int flag = 0;//是否可以构成图for(int i=0; i<m; i++){if(flag)break;sort(nodes+i,nodes+m, cmp); //循环排序for(int j=0; j<nodes[i].f; j++){ //后面的依次减1nodes[i+j+1].f --;if(nodes[i+j+1].f < 0){flag = 1;break;}map[nodes[i].index][nodes[i+j+1].index] = 1; //同时更新图map[nodes[i+j+1].index][nodes[i].index] = 1; //对称更新}}if(flag)cout << "NO" << endl;else{cout << "YES" << endl;print_map(map,m);}cout << endl;}return 0;}


热点排行