時間限制:
3000 ms | 記憶體限制:
65535 kb
難度:4 描述
這有乙個迷宮,有0~8行和0~8列:
1,1,1,1,1,1,1,1,1
1,0,0,1,0,0,1,0,1
1,0,0,1,1,0,0,0,1
1,0,1,0,1,1,0,1,1
1,0,0,0,0,1,0,0,1
1,1,0,1,0,1,0,0,1
1,1,0,1,0,1,0,0,1
1,1,0,1,0,0,0,0,1
1,1,1,1,1,1,1,1,1
0表示道路,1表示牆。
現在輸入乙個道路的座標作為起點,再如輸入乙個道路的座標作為終點,問最少走幾步才能從起點到達終點?
(注:一步是指從一座標點走到其上下左右相鄰座標點,如:從(3,1)到(4,1)。)
輸入
第一行輸入乙個整數n(0
輸出輸出最少走幾步。
樣例輸入
23 1 5 7
3 1 6 7
樣例輸出
12
思路分析:
這是乙個搜尋題,利用深搜,向四個方向不斷的搜尋,先把p賦乙個很大的值,來回替換找最小步數,利用廣搜,向四個方向搜尋,若該點可以走
將該點壓入棧中,否則捨棄,不斷尋找,直到到達終止點或不可以走為止。
深搜**:
#include#includeint a,b,c,d,sum,p;
int visit[9][9];
int map[9][9]=;
void dfs(int k,int l,int sum)
visit[k][l]=1;//標記該點已走
dfs(k,l+1,sum+1);//向右搜
dfs(k+1,l,sum+1);//向下搜
dfs(k,l-1,sum+1);//向左搜
dfs(k-1,l,sum+1);//向上搜
visit[k][l]=0;//取消標記
}int main()
return 0;
}
廣搜**:
#include#include#include#includeusing namespace std;
int sx,sy,ex,ey,sum;
int vist[4][2]=;//方向
int map[9][9]=;
struct node;
void bfs()
for(int i=0;i<4;i++)//判斷四個方向
} }}
int main()
return 0;
}
NYOJ 最小步數(bfs)
nyoj 58最小步數 時間限制 3000 ms 記憶體限制 65535 kb 難度 4描述 這有乙個迷宮,有0 8行和0 8列 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0...
nyoj 58 最小步數
兩份 都是我寫的,前後隔了很久.還好沒有忘記bfs的基本思路 圖一表示起點,首先起點入隊,佇列中有 x1,y1 while q.empty 這個迴圈中出隊,圖二檢視出隊的這個點 此時是起點 四個方向,如果沒走過就入隊那麼,現在佇列中就有 x2,y2 x3,y3 然後就一次進行上面的操作 最後就搜尋到...
最小步數nyoj 92
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 這有乙個迷宮,有0 8行和0 8列 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,1,0,...