最短経路長の原点から特定点までグリッドコンピューティング
[[1,1,0,1],
[1,0,1,0],
[1,1,1,1],
[1,0,1,1]]
件名の説明:
1後(TR、TC)の位置に代え、(0,0)の位置から最短経路長を表します。
アイデアの分析:
あなたは(TR、TC)を見つけるまで、検索を開始するポイント(0,0)からBFSのアイデアを使用してください。
コード:
public int minPathLength(int[][]grids,int tr,int tc){
int[][]direction={{1,0},{-1,0},{0,1},{0,-1}} //表示四个方向
int m=grids.length;
int n=grids[0].length;
int pathLength=0;
if(m==0||tr<0||tc<0)
return -1;
Queue<Pair<Integer,Integer>>queue=new LinkedList<>();//队列中存放每次访问到的点的坐标
queue.offer(new Pair<Integer,Integer>(0,0));
while(!queue.isEmpty()){
int size=queue.size(); //队列中是否有元素
pathLength++; //每循环一次,长度加一
while(size-->0){
Pair<Integer,Integer>cur=queue.poll();
int cr=cur.getKey(); //当前点的行坐标
int cc=cur.getValue(); //当前点的列坐标
grids[cr][cc]=0; //标记当前点已经访问过
for(int[]d:direction){
int nr=cr+d[0];
int nc=cc+d[1]; //下一个点的横纵坐标
if(nr<0||nr>=m||nc<0||nc>=n||grids[nr][nc]==0){
continue;
}
if(nr==tr&&nc==tc){
return pathLength;
}
queue.offer(new Pair<>(nr,nc));
}
}
}
return -1;
}