1. 程式人生 > >codeup id=1814 剩下的樹

codeup id=1814 剩下的樹

 程式碼錯誤50%

#include<iostream>
#include<stdlib.h> 
#define Maxsize 1000
using namespace std;
typedef struct node
{ struct node* prior;
  struct node* next;
	int data;
}NODE,*PNODE;
  /********遍歷連結串列 *****/
int traverse_list(PNODE r,PNODE L)
{
   	  	r=L;
		while(r->next!=NULL)
		{	
			r=r->next;
			printf(" %d",r->data);
		}
  return 0;
}
  /********連結串列節點統計*****/
int court_list_node(PNODE r,PNODE L,int &x)
{       
   	  	r=L->next;
		while(r!=NULL)
		{
			x++;
			r=r->next;
		}
  return 0;
}
  /********連結串列查詢元素 *****/
int findElement_prior_next(PNODE L,PNODE r,int e,int m,int v,PNODE &K)//連結串列頭參考點,遍歷指標,查詢值,連結串列區間值 ,返回指標
{	r=L;
    K=L;
	while(r!=NULL)
	{if(r->data==e)
	if(v==1)         
    K=r->prior;
    else if(v==2)
	K=r->next;
    r=r->next;
	}
	return 0;
  }
  


  /********建立連結串列 *****/
 void creatlist(PNODE S,PNODE P,int m)
 {
   
 		for(int j=0;j<=m;j++)
 	 	{	S=(PNODE)malloc(sizeof(NODE));
  			S->data=j;
  			P->next=S;
  			S->prior=P;
  			P=P->next;
  			//S=P->next;
			  
  		}
		   P->next=NULL;
	} 

	int main()
	{PNODE Phead,S,P,r,M1[Maxsize],M2[Maxsize],rear;
 	int m,left[Maxsize],right[Maxsize],NO;
 	int number=0;
 //	cout<<"輸入數值範圍0~m"<<endl;

	  while(cin>>m>>NO)
	  {if(m>10000||m<1)
	  break;
	 if(NO<0||NO>100)
	 break;
	 Phead=NULL;
	Phead=(PNODE)malloc(sizeof(NODE));//建立 表頭 
 	P=Phead;
    M1[0]=M2[0]=Phead;
  	creatlist(S,P,m);//建立連結串列
  	 	//traverse_list(r,Phead);//遍歷連結串列
  	//	cout<<endl;
  	//cout<<"輸入幾組區間"<<endl;
  	for(int i=0,v=1;i<NO;i++,v++)
  	{  //cout<<"輸入第"<<v<<"組區間"<<endl;
     		cin>>left[i]>>right[i];
     		r=Phead;
  		 findElement_prior_next(Phead,r,left[i],m,1,M1[i]);
		 findElement_prior_next(Phead,r,right[i],m,2,M2[i]);
	}
	  	for(int i=0;i<NO;i++)
  	{  
	if(left[i]<=left[i-1]&&right[i]>=right[i-1])//後一個區間包含前一個區間
			{ M1[i]->next=M2[i];
		     M2[i]->prior=M1[i];}
		else if(left[i]>=left[i-1]&&right[i]<=right[i-1])
			{ M1[i-1]->next=M2[i-1];
		     M2[i-1]->prior=M1[i-1];}
		else if(left[i]>right[i-1])//後一個區間與前一個區間不相關
	   {M1[i]->next=M2[i];
		M2[i]->prior=M1[i];
		} 
		else if(right[i-1]>=left[i])//後區間左區域在前區間內
		{ M1[i-1]->next=M2[i];
		  M2[i]->prior=M1[i-1];
		}
		
	}

  	  //r=Phead;
     //  traverse_list(r,Phead);//遍歷連結串列
    //  cout<<endl;
    //  cout<<"剩餘節點數量"<<endl;
    number=0;
       court_list_node(r,Phead,number);
    	cout<<number<<endl;
    }
    return 0;
}