一直走,如果遇到堵塞,就换方向走,直到走完所有元素
方向的顺序:右->下->左->上->右......
所以可以用循环取余的方式,表示方向的改变
flag=(flag+1)%4
0表示右,1表示下,2表示左,.......
堵塞:走到边界,或走到已经走过的元素
如果当前坐标为x,y,行数为row,列数为col
边界的表示:!(x>=0&&y>=0&&x<rol&&y<col)
走过的元素用vis数组标记
所以,整体思路
x=0 ,y=0 ,flag=0
while 没遍历完:
if((x,y)不是边界且没走过){加入list,并标记}
根据falg试着走下一步,并判断是否能走,如果不能走,则退回去,并改变方法
if(falg== 0 /1 /2/ 3 ){
(x,y)->(x1,y1)
如果不能走
(x1,y1)->(x,y),flag=(flag+1)%4;
}
代码: