📄 maze.h
字号:
{
dir=1;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
turn=0;
max=markall[x-1][y];
if(max<markall[x+1][y])
{ max=markall[x+1][y] ;}
num=0;
if(max==markall[x-1][y]) num+=1;
if(max==markall[x+1][y]) num+=2;
tag++;
SubAllocate(num,_stackarray,n,position,markall,mark,pos,tag);
}
}
}
else
{
dir=1;
turn=0;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=3;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
turn=1;
max=markall[x-1][y];
if(max<markall[x+1][y])
{ max=markall[x+1][y] ;}
num=0;
if(max==markall[x-1][y]) num+=1;
if(max==markall[x+1][y]) num+=2;
tag++;
SubAllocate(num,_stackarray,n,position,markall,mark,pos,tag);
}
}
}
}
}
break;
case 13:
// all go to (x-1,y) and (x,y-1) and (x,y+1)
turn=0;
for(i=0;i<n;i++)
{
if(EqualElement(_stackarray[i].GetCurrentPosition(),position))
{
dir=0;
if(tag==4)
{
_stackarray[i].TestDirection(dir,markall,mark,pos);
tag=0;
return ;
}
switch(turn)
{
case 0:
dir=0;
turn=1;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=3;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=1;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
turn=0;
dir=2;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=0;
_stackarray[i].TestDirection(dir,markall,mark,pos);
}
}
}
}
break;
case 1:
dir=3;
turn=2;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=1;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=0;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
turn=1;
dir=2;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=0;
_stackarray[i].TestDirection(dir,markall,mark,pos);
}
}
}
}
break;
case 2:
dir=1;
turn=0;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=0;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=3;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
turn=2;
dir=2;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=0;
_stackarray[i].TestDirection(dir,markall,mark,pos);
}
}
}
}
break;
}
}
}
break;
case 14:
// all go to (x+1,y) and (x,y-1) and (x,y+1)
turn=0;
for(i=0;i<n;i++)
{
if(EqualElement(_stackarray[i].GetCurrentPosition(),position))
{
dir=0;
if(tag==4)
{
_stackarray[i].TestDirection(dir,markall,mark,pos);
tag=0;
return ;
}
switch(turn)
{
case 0:
dir=2;
turn=1;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=3;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=1;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
turn=0;
dir=0;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=0;
_stackarray[i].TestDirection(dir,markall,mark,pos);
}
}
}
}
break;
case 1:
dir=3;
turn=2;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=1;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=1;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
turn=1;
dir=2;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=0;
_stackarray[i].TestDirection(dir,markall,mark,pos);
}
}
}
}
break;
case 2:
dir=1;
turn=0;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=2;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=3;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
turn=2;
dir=0;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=0;
_stackarray[i].TestDirection(dir,markall,mark,pos);
}
}
}
}
break;
}
}
}
break;
case 15: // all go to (x-1,y) and (x+1,y) and (x,y-1) and (x,y+1)
turn=0;
for(i=0;i<n;i++)
{
if(EqualElement(_stackarray[i].GetCurrentPosition(),position))
{
dir=0;
if(tag==4)
{
_stackarray[i].TestDirection(dir,markall,mark,pos);
tag=0;
return ;
}
switch(turn)
{
case 0:
dir=0;
_stackarray[i].TestDirection(dir,markall,mark,pos);
turn=1;
break;
case 1:
dir=1;
_stackarray[i].TestDirection(dir,markall,mark,pos);
turn=2;
break;
case 2:
dir=2;
_stackarray[i].TestDirection(dir,markall,mark,pos);
turn=3;
break;
case 3:
dir=3;
_stackarray[i].TestDirection(dir,markall,mark,pos);
turn=0;
break;
}
}
}
break;
default:
break;
}
}
void HumanSubAllocate(int count,Stack _stackarray[],int n,element position,int markall[CONST_MAZEX][CONST_MAZEY],bool mark[CONST_MAZEX][CONST_MAZEY],int pos[CONST_MAZEX][CONST_MAZEY],int &tag)
// hxm end
{
int max,i;
int num;
int dir;
int x=position.row;
int y=position.col;
int turn;
switch(count)
{
case 1: // all go to (x-1,y)
for(i=0;i<n;i++)
{
if(EqualElement(_stackarray[i].GetCurrentPosition(),position))
{
dir=0;
if(tag==4)
{
_stackarray[i].HumanTestDirection(dir,markall,mark,pos);
tag=0;
return ;
}
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
max=markall[x+1][y];
if(max<markall[x][y-1])
{ max=markall[x][y-1];}
if(max<markall[x][y+1])
{ max=markall[x][y+1];}
num=0;
if(max==markall[x+1][y]) num+=2;
if(max==markall[x][y-1]) num+=4;
if(max==markall[x][y+1]) num+=8;
tag++;
HumanSubAllocate(num,_stackarray,n,position,markall,mark,pos,tag);
}
}
}
break;
case 2: // all go to (x+1,y)
for(i=0;i<n;i++)
{
if(EqualElement(_stackarray[i].GetCurrentPosition(),position))
{
dir=2;
if(tag==4)
{
_stackarray[i].HumanTestDirection(dir,markall,mark,pos);
tag=0;
return ;
}
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
max=markall[x-1][y];
if(max<markall[x][y-1])
{ max=markall[x][y-1];}
if(max<markall[x][y+1])
{ max=markall[x][y+1];}
num=0;
if(max==markall[x-1][y]) num+=1;
if(max==markall[x][y-1]) num+=4;
if(max==markall[x][y+1]) num+=8;
tag++;
HumanSubAllocate(num,_stackarray,n,position,markall,mark,pos,tag);
}
}
}
break;
case 3: // all to (x-1,y) and (x+1,y)
turn=0;
for(i=0;i<n;i++)
{
if(EqualElement(_stackarray[i].GetCurrentPosition(),position))
{
if(turn==0)
{
dir=0;
if(tag==4)
{
_stackarray[i].HumanTestDirection(dir,markall,mark,pos);
tag=0;
return ;
}
turn=1;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=2;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
turn=0;
max=markall[x][y-1];
if(max<markall[x][y+1])
{ max=markall[x][y+1];}
num=0;
if(max==markall[x][y-1]) num+=4;
if(max==markall[x][y+1]) num+=8;
tag++;
HumanSubAllocate(num,_stackarray,n,position,markall,mark,pos,tag);
}
}
}
else
{
dir=2;
if(tag==4)
{
_stackarray[i].HumanTestDirection(dir,markall,mark,pos);
tag=0;
return ;
}
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=0;
turn=0;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
turn=1;
max=markall[x][y-1];
if(max<markall[x][y+1])
{ max=markall[x][y+1] ;}
num=0;
if(max==markall[x][y-1]) num+=4;
if(max==markall[x][y+1]) num+=8;
tag++;
HumanSubAllocate(num,_stackarray,n,position,markall,mark,pos,tag);
}
}
}
}
}
break;
case 4:
// all go to (x,y-1)
for(i=0;i<n;i++)
{
if(EqualElement(_stackarray[i].GetCurrentPosition(),position))
{
dir=3;
if(tag==4)
{
_stackarray[i].HumanTestDirection(dir,markall,mark,pos);
tag=0;
return ;
}
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
max=markall[x-1][y];
if(max<markall[x+1][y])
{ max=markall[x+1][y] ;}
if(max<markall[x][y+1])
{ max=markall[x][y+1] ;}
num=0;
if(max==markall[x-1][y]) num+=1;
if(max==markall[x+1][y]) num+=2;
if(max==markall[x][y+1]) num+=8;
tag++;
HumanSubAllocate(num,_stackarray,n,position,markall,mark,pos,tag);
}
}
}
break;
case 5: // all go to (x-1,y) and (x,y-1)
turn=0;
for(i=0;i<n;i++)
{
if(EqualElement(_stackarray[i].GetCurrentPosition(),position))
{
if(turn==0)
{
dir=0;
if(tag==4)
{
_stackarray[i].HumanTestDirection(dir,markall,mark,pos);
tag=0;
return ;
}
turn=1;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=3;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
turn=0;
max=markall[x+1][y];
if(max<markall[x][y+1])
{ max=markall[x][y+1] ;}
num=0;
if(max==markall[x+1][y]) num+=2;
if(max==markall[x][y+1]) num+=8;
tag++;
HumanSubAllocate(num,_stackarray,n,position,markall,mark,pos,tag);
}
}
}
else
{
dir=3;
if(tag==4)
{
_stackarray[i].HumanTestDirection(dir,markall,mark,pos);
tag=0;
return ;
}
turn=0;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=0;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
turn=1;
max=markall[x+1][y];
if(max<markall[x][y+1])
{ max=markall[x][y+1] ;}
num=0;
if(max==markall[x+1][y]) num+=2;
if(max==markall[x][y+1]) num+=8;
tag++;
HumanSubAllocate(num,_stackarray,n,position,markall,mark,pos,tag);
}
}
}
}
}
break;
case 6: // all go to (x+1,y) and (x,y-1)
turn=0;
for(i=0;i<n;i++)
{
if(EqualElement(_stackarray[i].GetCurrentPosition(),position))
{
if(turn==0)
{
turn=1;
dir=2;
if(tag==4)
{
_stackarray[i].HumanTestDirection(dir,markall,mark,pos);
tag=0;
return ;
}
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
dir=3;
if(_stackarray[i].TestDir(dir,markall,mark,pos)==false)
{
turn=0;
max=markall[x-1][y];
if(max<markall[x][y+1])
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -