pat-1142

https://www.cnblogs.com/minks/p/4734485.html图论术语 

#include<iostream>
#include<vector>
using namespace std;
//编写完成后再大体看一遍知道哪一块干什么事情,之后再运行样例否则出了错误 找自己在哪写的还需要时间而且还容易懵逼(注意) 
int a[209][209];
int nv,ne;

int main()
{ cin>>nv>>ne;
   for(int i=0;i<ne;i++)
   {int ll,rr;
   cin>>ll>>rr;
   a[ll][rr]=a[rr][ll]=1;
   //记录顶点出没出现过
   }
   int que;
   cin>>que;
   for(int i=0;i<que;i++)
   { int tempk;
    cin>>tempk;
    //hash一开始没放进来(注意) 
    int hash[209]={0};
   	vector<int>v;
   	int data;
   	    for(int j=0;j<tempk;j++)
   	    {cin>>data;
   	    v.push_back(data);
   	    hash[data]=1;}
   	    //如同矩阵遍历先固定一个坐标 
   	    int isc=1,ismaxc=1;
   	for(int i=0;i<v.size();i++)
   	    for(int j=i+1;j<v.size();j++)
   	    {if(a[v[i]][v[j]]==0)isc=0;
   	       //没有输入了可以加break 
		   break; 
		   }
		   if(isc==0) printf("Not a Clique\n");
	if(isc==1)
	   {   for(int i=1;i<=nv;i++)
	          if(hash[i]==0) {
	          	for(int j=0;j<v.size();j++)
	          	  {
				  if(a[i][v[j]]==0) break;
	           	  if(j==v.size()-1) ismaxc=0;
	             }
			  }
	   }
	if(ismaxc==0) printf("Not Maximal\n");
	//条件要逐步累加,否则有可能出现前面不成立后面成立的错误(注意) 
	if(isc==1&&ismaxc==1)printf("Yes\n");
   }
return 0;	
 } 

总结

1.//编写完成后再大体看一遍知道哪一块干什么事情,之后再运行样例否则出了错误 找自己在哪写的还需要时间而且还容易懵逼(注意) 先有个数哪里出错哪里找

2.基本原则 以题意为本 不要妄加猜测,题目上整么说整么来,因为他有可能整个你没见过的名词只给你说性质,你未必学过

3. 如果需要标记哪些出现过哪些没出现过需要用到没出现的那些 //记录顶点出没出现过列一个 hash标记不错,但最后访问时要知道0位置有没有用

4.//hash一开始没放进来(注意)条件重置检查一下

5. //如同矩阵遍历先固定一个坐标 

6. //没有输入了可以加break 

7.//条件要逐步累加,否则有可能出现前面不成立后面成立的错误(注意)尤其是使用钥匙原则时上面要上两把锁,不能少上导致不小心开了

英语:

问题

稍微了解一下图的术语  但以后看题你要先在自己什么都不知道的前提下去看问题

猜你喜欢

转载自blog.csdn.net/m0_45359314/article/details/112759757