1. 程式人生 > >codeup id=6116 Shortest Distance (20)

codeup id=6116 Shortest Distance (20)

連結串列方式超時

#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct node
{ struct node *next;
  struct node *prior;
  int data;
}Node,*Pnode;
int search_all(Pnode L,Pnode r)
{r=L;
while(r->next!=L)
 { //
   r=r->next;
   cout<<"-"<<r->data<<"-"<<endl;
  // if(r==L)
  // break;
 }
 return 0;
}
int initNode(Pnode N)
{if(N==NULL)
 //cout<<"此表為空表"<<endl;
 return 1;
 else
 //cout<<"此表不為空表"<<endl;
 N==NULL;
 return 0;
}
int findele(Pnode L,Pnode r,int N,Pnode &Q) //Q定位指標 r遍歷指標
{ r=L;
for(int i=0;i<N;i++)
 { 
   
   r=r->next;

 }
 Q=r;
 //cout<<"Q的地址確定"<<Q<<"Q="<<Q->data<<endl;
   return 0;
}
int pri_find(Pnode L,Pnode r,Pnode Q,int &court) //Q定位指標 r遍歷指標 Q1 r Q2 court
{ r=Q;court=0;
 while(1)
 { 
     
  r=r->prior;
//cout<<"WEIZJI"<<r->data<<endl;

court+=r->data;
//cout<<"距離"<<court<<endl;
   if(r==L)
  {
   break;
   } 
}
//cout<<"距離"<<court<<endl;
   return 0;
}
int later_find(Pnode L,Pnode r,Pnode Q,int &court) //Q定位指標 r遍歷指標
{ r=Q;court=0;
 while(1)
 { 
  court+=r->data;
//cout<<"WSDSADASDAD"<<r->data<<endl;

   r=r->next;
   if(r==L)
   {break;
	 }  
 // cout<<r->data<<endl;
	

 }
   return 0;
}
int creat(Pnode L,Pnode &S,Pnode &P,int N)
{int a;
P=L;
//cout<<"輸入資料"<<endl;
for(int i=0;i<N;i++)
  {//cout<<"第"<<i+1<<"組"<<endl;
  cin>>a;
  S=(Pnode)malloc(sizeof(Node));
   P->next=S;
   S->data=a;
   S->prior=P;
   P=P->next;
   }
   return 0;
}
int main()
{int N,M1,M2,court1,court2,M;
 Pnode L,S,P,r,Q1,Q2;
 while(cin>>N)
 { if(N<3||N>100000)
  initNode(L);
  initNode(S);
// L=S=NULL;
 L=(Pnode)malloc(sizeof(Node));
 L->prior=NULL;
 P=r=Q1=Q2=L;
 
 creat(L,S,P,N);
 P->next=L->next;
 L->next->prior=P;
//search_all(L,r);//遍歷連結串列
cin>>M;
for(int j=0;j<M;j++)
{
cin>>M1>>M2;
 findele(L,r,M1,Q1);
 findele(L,r,M2,Q2);
 pri_find(Q1,r,Q2,court1); //Q定位指標 r遍歷指標
 later_find(Q1,r,Q2,court2); //Q定位指標 r遍歷指標
  //cout<<"前驅查詢"<<court1<<endl;
//  cout<<"後繼查詢"<<court2<<endl;
 if(court1<court2)
   cout<<court1<<endl;
  else cout<<court2<<endl;
  }
}return 0;
}
程式碼段 小部件 [Dàimǎ duàn xiǎo bùjiàn] Code section widget