#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 5005
typedef struct
{
int *x;
int *y;
int front,rear;
}SeqQueue;
void Init_SeqQueue(SeqQueue *Q,int n)
{
Q->x=(int *)malloc(n*sizeof(int));
Q->y=(int *)malloc(n*sizeof(int));
if(Q->x==NULL||Q->y==NULL)
{
exit(-1);
}
Q->front=Q->rear=0;
}
int Empty_SeqQueue(SeqQueue *Q)
{
if(Q->front==Q->rear)
{
return 1;
}
else
{
return 0;
}
}
int Full_SeqQueue(SeqQueue *Q)
{
if((Q->rear+1)%MAXSIZE==Q->front)
{
return 1;
}
else
{
return 0;
}
}
int Length_SeqQueue(SeqQueue *Q)
{
int k;
k=(Q->rear-Q->front+MAXSIZE)%MAXSIZE;
return(k);
}
int Collide(SeqQueue *Q)
{
int t=Q->front;
while (t!=Q->rear-1)
{
if (Q->x[t%MAXSIZE]==Q->x[Q->rear-1]&&Q->y[t%MAXSIZE]==Q->y[Q->rear-1])
{
return 0;
}
t++;
}
return 1;
}
int EnQueue_SeqQueue_1(SeqQueue *Q,int x,int y)
{
if(Full_SeqQueue(Q)==1)
{
return 0;
}
else
{
Q->x[Q->rear]=x;
Q->y[Q->rear]=y;
Q->rear=(Q->rear+1)%MAXSIZE;
return 1;
}
}
int EnQueue_SeqQueue(SeqQueue *Q,int e)
{
if(Full_SeqQueue(Q)==1)
{
return 0;
}
else
{
if(e==0)
{
Q->x[Q->rear]=Q->x[((Q->rear)-1+MAXSIZE)%MAXSIZE]-1;
Q->y[Q->rear]=Q->y[((Q->rear)-1+MAXSIZE)%MAXSIZE];
Q->rear=((Q->rear)+1)%MAXSIZE;
}
else if (e==1)
{
Q->x[Q->rear]=Q->x[((Q->rear)-1+MAXSIZE)%MAXSIZE]+1;
Q->y[Q->rear]=Q->y[((Q->rear)-1+MAXSIZE)%MAXSIZE];
Q->rear=((Q->rear)+1)%MAXSIZE;
}
else if (e==2)
{
Q->x[Q->rear]=Q->x[((Q->rear)-1+MAXSIZE)%MAXSIZE];
Q->y[Q->rear]=Q->y[((Q->rear)-1+MAXSIZE)%MAXSIZE]-1;
Q->rear=((Q->rear)+1)%MAXSIZE;
}
else if (e==3)
{
Q->x[Q->rear]=Q->x[((Q->rear)-1+MAXSIZE)%MAXSIZE];
Q->y[Q->rear]=Q->y[((Q->rear)-1+MAXSIZE)%MAXSIZE]+1;
Q->rear=((Q->rear)+1)%MAXSIZE;
}
return 1;
}
}
int DeQueue_SeqQueue(SeqQueue *Q)
{
if(Empty_SeqQueue(Q))
{
return 0;
}
else
{
Q->front=(Q->front+1)%MAXSIZE;
return 1;
}
}
void Display_SeqQueue(SeqQueue *Q)
{
int k,len;
if(Empty_SeqQueue(Q)==1)
{
}
else
{
len=Length_SeqQueue(Q);
for(k=0;k<len;k++)
{
printf("%4d ",Q->x[(Q->front+k)%MAXSIZE]);
printf("%4d\n",Q->y[(Q->front+k)%MAXSIZE]);
}
}
}
int main()
{
SeqQueue Q;
int n,t,i,T=0;
scanf("%d %d",&n,&t);
int x[n],y[n],e[t];
Init_SeqQueue(&Q,MAXSIZE);
for (i=0;i<n;i++)
{
scanf("%d %d",&x[i],&y[i]);
}
for(i=n-1;i>=0;i--)
{
EnQueue_SeqQueue_1(&Q,x[i],y[i]);
}
for(i=0;i<t;i++)
{
scanf("%d",&e[i]);
}
for(i=0;i<t;i++)
{
DeQueue_SeqQueue(&Q);
EnQueue_SeqQueue(&Q,e[i]);
if(Collide(&Q))
{
T++;
}
else
{
break;
}
}
printf("%d",T);
return 0;
}
缺点较为明显,运行时间长。