sicily 1035 基因对问题

#include <stdlib.h>

#include <iostream>

#include <string>

using namespace std;



#define N 100



typedef struct node{

	string s;

	struct node* ptr;

}Node;



bool IsMatch(string a,string b)

{

 	int aLengh=a.length();

	int bLengh=b.length();

	if(aLengh!=bLengh)

	{

	 	return false;

	}

	int i=0;

 	for(;i<aLengh;i++)

	{

	 	if(a[i]=='A'&&b[i]=='T')

		{

		 	continue;

		}

		if(a[i]=='T'&&b[i]=='A')

		{

		 	continue;

		}

		if(a[i]=='C'&&b[i]=='G')

		{

		 	continue;

		}

		if(a[i]=='G'&&b[i]=='C')

		{

		 	continue;

		}

		break;

	}

	if(i==aLengh)

		return true;

	return false;

}

int main()

{

 	int nt,n;

	string str;

	Node* headerNode=NULL;

	Node* cur;

	Node* pre;

	bool flag;

	int count; 

	cin>>nt;

	for(int i=0;i<nt;i++)

	{

	 	cin>>n;

		count=0;

		for(int j=0;j<n;j++)

		{

		 	cin>>str;

			//从现有队列中找,是否可以找到匹配的基因对,如果找到,那么该对应的

			//基因对出列,计数器++ 

			pre=cur=headerNode;

			flag=true;

			while(cur!=NULL)

			{

			 	if(IsMatch(str,cur->s))

				{

				 	count++;

					flag=false;

				 	if(headerNode==cur)

					{

					 	headerNode=cur->ptr;

						delete cur;

						break;

					}

					else

					{

					 	pre->ptr=cur->ptr;

						delete cur;

						break;

					}

				}

				else

				{

				 	pre=cur;

					cur=cur->ptr;

				}

			}

			//表示没有找到匹配的基因对,那么从头部插入 

			if(flag)

			{

			 	Node* temp=new Node();

				temp->s=str;

				temp->ptr=headerNode;

				headerNode=temp;

			}

			

		}

		cout<<count<<endl;

		//释放内存

		while(headerNode!=NULL)

		{

		 	Node* temp=headerNode;

			headerNode=headerNode->ptr;

			delete temp;

		} 

	}

 	system("pause");

	return 0;

}

 

你可能感兴趣的:(问题)