SDUT 1265-马停下过河卒(DFS)
生活随笔
收集整理的這篇文章主要介紹了
SDUT 1265-马停下过河卒(DFS)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
馬攔過河卒
Time Limit: 3000ms?? Memory limit: 65536K??有疑問?點這里^_^
題目描寫敘述
棋盤上A點有一個過河卒,須要走到目標B點。卒行走的規(guī)則:可以向下、或者向右。同一時候在棋盤上C點有一個對方的馬,該馬所在的點和全部跳躍一步可達的點稱為對方馬的控制點。
因此稱之為“馬攔過河卒”。棋盤用坐標表示,A點(0。0)、B點(n,m)(n,m為不超過15的整數(shù))。相同馬的位置坐標是須要給出的。如今要求你計算出卒從A點可以到達B點的路徑的條數(shù),如果馬的位置是固定不動的,并非卒走一步馬走一步。
輸入
一行四個數(shù)據(jù),用空格分隔,分別表示B點的坐標和馬的坐標。輸出
一個數(shù)據(jù),表示全部的路徑條數(shù)。演示樣例輸入
6 6 3 3演示樣例輸出
6 sad 寫了好久。。接近一個小時。一開始竟然把馬的范圍初始化錯了。。
首先生成地圖,然后掛掉馬的范圍(8個點) 。然后爆搜就能夠了。 #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <cctype> #include <cmath> #include <cstdlib> #include <vector> #include <queue> #include <set> #include <map> #include <list> #define ll long long using namespace std; const int INF = 0x3f3f3f3f; int n,m,ex,ey,ans,ma[20][20]; bool vis[20][20]; void dfs(int x,int y) {if(x==n&&y==m){ans++;return ;}if(x+1<=n&&ma[x+1][y]&&!vis[x+1][y]){vis[x+1][y]=1;dfs(x+1,y);vis[x+1][y]=0;}if(y+1<=m&&ma[x][y+1]&&!vis[x][y+1]){vis[x][y+1]=1;dfs(x,y+1);vis[x][y+1]=0;} } int main() {memset(vis,0,sizeof(vis));scanf("%d%d%d%d",&n,&m,&ex,&ey);ans=0;for(int i=0;i<=n;i++)for(int j=0;j<=m;j++)ma[i][j]=1;if(ex-1>=0&&ex-1<=n&&ey-2>=0&&ey-2<=m)ma[ex-1][ey-2]=0;if(ex-1>=0&&ex-1<=n&&ey+2>=0&&ey+2<=m)ma[ex-1][ey+2]=0;if(ex+1>=0&&ex+1<=n&&ey-2>=0&&ey-2<=m)ma[ex+1][ey-2]=0;if(ex+1>=0&&ex+1<=n&&ey+2>=0&&ey+2<=m)ma[ex+1][ey+2]=0;if(ex+2>=0&&ex+2<=n&&ey-1>=0&&ey-1<=m)ma[ex+2][ey-1]=0;if(ex+2>=0&&ex+2<=n&&ey+1>=0&&ey+1<=m)ma[ex+2][ey+1]=0;if(ex-2>=0&&ex-2<=n&&ey+1>=0&&ey+1<=m)ma[ex-2][ey+1]=0;if(ex-2>=0&&ex-2<=n&&ey-1>=0&&ey-1<=m)ma[ex-2][ey-1]=0;if(ex>=0&&ex<=n&&ey>=0&&ey<=m)ma[ex][ey]=0;vis[0][0]=1;dfs(0,0);printf("%d\n",ans);return 0; }版權(quán)聲明:本文博客原創(chuàng)文章,博客,未經(jīng)同意,不得轉(zhuǎn)載。
轉(zhuǎn)載于:https://www.cnblogs.com/blfshiye/p/4731689.html
總結(jié)
以上是生活随笔為你收集整理的SDUT 1265-马停下过河卒(DFS)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySql中truncate,delet
- 下一篇: 对于当下国产CPU如火如荼有感