图老师设计创意栏目是一个分享最好最实用的教程的社区,我们拥有最用心的各种教程,今天就给大家分享弦图ZOJ 1015 Fishing Net 判定方法的教程,热爱PS的朋友们快点看过来吧!
【 tulaoshi.com - 编程语言 】
做题思路:

贴代码:(V*V的复杂度。。。) 
代码如下:
 
#include iostream 
#include cstdio 
#include cstring 
#include algorithm 
using namespace std; 
const int maxn=1000+10; 
int gra[maxn][maxn]; 
int n, m; 
int label[maxn], temp[maxn], num[maxn]; 
void numberVertex() 
{ 
int i, j; 
//label[n]=0, num[n]=1; 
for(i=n; i=1; i--) 
{ 
int mm=-1, pos; 
for(j=1; j=n; j++) 
{ 
if( !num[j] && label[j]mm) 
{ 
mm=label[j]; 
pos=j; 
} 
} 
num[pos]=i; 
for(j=1; j=n; j++) 
{ 
if( !num[j] && ( gra[pos][j] || gra[j][pos] ) ) 
label[j]++; 
} 
} 
return ; 
} 
int check() 
{ 
int i, j, flag=1; 
for(i=1; i=n && flag; i++) 
{ 
memset(temp,0,sizeof(temp)); 
int len=0; 
for(j=1; j=n; j++) 
{ 
if( num[i]num[j] && gra[ i ][ j ] ) 
{ 
temp[len++]=j; 
} 
} 
for(j=1; jlen; j++)//在此WA了一天有木有。。。 
if(num[ temp[0] ]num[ temp[j] ]) 
swap(temp[0], temp[j]); 
for(j=1; jlen; j++) 
if( !gra[ temp[0] ][ temp[j] ] ) 
{ 
flag=0; 
break; 
} 
} 
return flag; 
} 
int main() 
{ 
while( scanf("%d %d",&n,&m)!=EOF ) 
{ 
if(n==0 && m==0) 
break; 
memset(label,0,sizeof(label)); 
memset(num,0,sizeof(num)); 
memset(gra,0,sizeof(gra)); 
for(int i=0; im; i++) 
{ 
int x, y; 
scanf("%d %d",&x, &y); 
gra[x][y]=gra[y][x]=1; 
} 
numberVertex(); 
if( check() ) 
puts("Perfectn"); 
else 
puts("Imperfectn"); 
} 
return 0; 
} 
来源:http://www.tulaoshi.com/n/20160219/1598860.html
看过《弦图ZOJ 1015 Fishing Net 判定方法》的人还看了以下文章 更多>>