杭电ACM1026,提示超时。求给出一组测试用例验证程序异常,谢谢
杭电ACM1026,提示超时。求给出一组测试用例验证程序错误,多谢
#include <stdio.h>
#include <stdlib.h>
#define N 102
#define MaxSize (N*N)//调整
#define Elem Node
typedef struct Node
{
int xPos;
int yPos;
char value;
int t;//记录时间
bool visited;
struct Node* pre;
}Node;//节点信息
Node PopList[MaxSize];//记录pop出来的节点
Node Result[MaxSize];
typedef struct
{
Elem S[MaxSize];
int top;
int rear;
}SqQueue;//队列信息
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int row,col,w;//记录弹出的节点
Elem Board[N][N];
void InitQueue(SqQueue &s);
void EnQueue(SqQueue &s,Elem x);
void DeQueue(SqQueue &s,Elem &x);
int Length(SqQueue s);
bool IsEmptyQueue(SqQueue s);
bool IsFullQueue(SqQueue s);
void Display(bool);
void Priority_Queue(SqQueue &s);
void main()
{
int i,j,_xPos,_yPos;
SqQueue s;
Node enNode;
Node deNode;
bool isFound;
while (scanf(" %d %d",&row,&col)!=EOF)
{
//数据输入和加哨兵
isFound=false;
for (i=0;i<=row+1;i++)
{
for (j=0;j<=col+1;j++)
{
if (i==0||j==0||i==row+1||j==col+1)
{
Board[i][j].value='X';
}
else
{
Board[i][j].visited=false;
Board[i][j].xPos=i;
Board[i][j].yPos=j;
Board[i][j].t=0;
Board[i][j].pre=NULL;
scanf(" %c",&Board[i][j].value);
}
}
}
//入队和出队
InitQueue(s);
enNode.xPos=1;
enNode.yPos=1;
enNode.value='.';
enNode.t=0;
enNode.pre=NULL;
EnQueue(s,enNode);
Board[1][1].visited=true;
w=0;//记录弹出的Node
while (!IsEmptyQueue(s))
{
Priority_Queue(s);
DeQueue(s,deNode);
PopList[w]=deNode;
if (deNode.xPos!=row||deNode.yPos!=col)
{
for (i=0;i<4;i++)//上下左右
{
_xPos=deNode.xPos+dir[i][0];
_yPos=deNode.yPos+dir[i][1];
if (Board[_xPos][_yPos].visited==false && Board[_xPos][_yPos].value!='X')//访问过的、周围的墙
{
if (Board[_xPos][_yPos].value=='.')
{
enNode.t=PopList[w].t+1;
}
else if (Board[_xPos][_yPos].value!='.')
{
enNode.t=PopList[w].t+1+Board[_xPos][_yPos].value-'0';
}
enNode.value=Board[_xPos][_yPos].value;
enNode.xPos=_xPos;
enNode.yPos=_yPos;
EnQueue(s,enNode);