HDOJ1010深搜 數學奇偶性剪枝

2021-06-26 20:57:34 字數 1277 閱讀 7745

/*

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軸對稱 和 原點對稱。但是在偶然的一次思路梳理中,我突然明白了 奇偶性 背後的意思。幾天前我查資料的時候,還沒有看到網上有這種觀點,鑑於這種觀點還不...