/*
1010標準搜尋題,不過一開始很容易把題目看錯
易錯的理解:廣搜,在t秒之內從起點走到終點即可。純模版題
正確的理解:深搜,每個點在只能去一次的情況下,而且不能停留只能經過
這就要求我們把所有的路徑遍歷
方法:深搜+數學奇偶性剪枝
效率:578ms
*/#include #include #include #include #include #include #include #include using namespace std;
#define input freopen("input.txt","r",stdin)
#define output freopen("output.txt","r",stdout)
#define for1(i,a,b) for (i=a;ib;i--)
#define dec2(i,a,b) for (i=a;i>=b;i--)
#define sca(x) scanf("%d",&x)
#define fill(x,a) memset(x,a,sizeof(x))
#define maxn 0x7fffffff
int dir_x=;//x方向常量
int dir_y=;//y方向常量
int map[10][10];//儲存地圖,將題中的字母全部改為習慣的0斷1通
bool book[10][10];//深搜模版中標記每個點是否走過
int n,m,t,i,j,k;
int sx,sy,ex,ey;//sx==startx,sy==starty,ex==endx,ey==endy
char in[10];
int flag;//標記是否有解
void dfs(int cur_x,int cur_y,int steps)//傳入的是當前在哪個座標(x,y),已經從起點走了多少步
int i,j,k,newx,newy;
for(k=1;k<=4;k++)//四種方向 }
return;
}int main()
//如何處理字元
if (sx==ex&&sy==ey)//剪枝一,如果終點和起點在一起(其實不可能)
book[sx][sy]=1;
flag=0;
dfs(sx,sy,0);
if (flag)
cout<<"yes"
cout<<"no"<} return 0;
}
HDOJ 1010迷宮 dfs 奇偶剪枝
奇偶剪枝 把矩陣標記成如下形式 0,1,0,1,0 1,0,1,0,1 0,1,0,1,0 1,0,1,0,1 很明顯,如果起點在0 而終點在1 那顯然 要經過奇數步才能從起點走到終點,依次類推,奇偶相同的偶數步,奇偶不同的奇數步。在讀入資料的時候就可以判斷,並且做剪枝,當然做的時候並不要求把整個矩...
換個姿勢學數學 函式 奇偶性 的由來
uxe001 1 之前談論到 奇偶性 的時候 ux002 我認為這個名字起得並不好,因為實在是很難從字面上聯想到數學性質本身。所以我建議叫做 對稱性 y軸對稱 和 原點對稱。但是在偶然的一次思路梳理中,我突然明白了 奇偶性 背後的意思。幾天前我查資料的時候,還沒有看到網上有這種觀點,鑑於這種觀點還不...
換個姿勢學數學 函式 奇偶性 的由來
uxe001 1 之前談論到 奇偶性 的時候 ux002 我認為這個名字起得並不好,因為實在是很難從字面上聯想到數學性質本身。所以我建議叫做 對稱性 y軸對稱 和 原點對稱。但是在偶然的一次思路梳理中,我突然明白了 奇偶性 背後的意思。幾天前我查資料的時候,還沒有看到網上有這種觀點,鑑於這種觀點還不...