時間限制: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
輸出輸出最少走幾步。
樣例輸入
2樣例輸出3 1 5 7
3 1 6 7
1211用dfs 或 bfs進行窮舉
(1)dfs
#include #include #define inf 80int res,flag[9][9];
int maze[9][9]=;
void dfs(int si,int sj,int ei,int ej,int count)
if(si<0 || si>8 || sj<0 || sj>8 || flag[si][sj] || maze[si][sj]) return;
flag[si][sj]=1;
// four corners
if((si==0 || si==8) && ((sj==0 || sj==8)))
else if(si==0 && sj==8)
else if(si==8 && sj==0)
else
dfs(ssi,ssj,ei,ej,count+1);
dfs(sssi,sssj,ei,ej,count+1);
} //four edges
else if(!(si>0 && si<8 && sj>0 && sj<8))
else if(si==8)
else if(sj==0)
else
dfs(ssi,ssj,ei,ej,count+1);
dfs(sssi,sssj,ei,ej,count+1);
dfs(ssssi,ssssj,ei,ej,count+1);
} else
flag[si][sj]=0;
}int main()
return 0;
}
(2)bfs
bfs求最小步數之所以不用更新距離d,是因為訪問任何乙個點(i,j)
必然都是距離(si,sj)最短距離(聯想起bfs的分支圖即明白這一點)
#include #include #include using namespace std;typedef pairp; //用結構體struct point亦可
const int inf=80;
char maze[10][10]=;
int sx,sy,gx,gy;
int d[9][9]; //出發點到(i,j)的最短路徑,同時起到判斷是否已訪問的作用
int dis[4][2]=;
void init()
void bfs()
} }printf("%d\n",d[gx][gy]);
}int main()
return 0;
}
對bfs的一點補充。。。
我們實際可以不用定義點,只要能夠對不同的點進行區分即可,用9*i+j可將二維的點轉化為一維(實際有點時間換空間的意味,全當另一種方法的了解),核心如下:
int graph[81],front,rear;front和rear共同起到佇列的作用,入隊,graph[rear++]=9*i+j(入隊點為(i,j)),出隊時,x=graph[front]/9,y=graph[front++]%9;
其餘同bfs**
其中,bfs的**參照:
NYOJ 最少步數
時間限制 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...
NYOJ 最少步數
時間限制 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,...
nyoj 最少步數
時間限制 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,...