codeup id=6116 Shortest Distance (20)
阿新 • • 發佈:2018-12-18
連結串列方式超時
程式碼段 小部件 [Dàimǎ duàn xiǎo bùjiàn] Code section widget#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; }