當前位置:編程學習大全網 - 網站源碼 - c++編程題目

c++編程題目

源代碼:

#include<iostream>

using?namespace?std?;

int?n,m,?ans?=?0?;

int?dx[8]?=?{-1,-2,-2,-1,1,2,2,1},?dy[8]?=?{-2,-1,1,2,-2,-1,1,2}?;

bool?visit[20][20]?;

bool?isvalid?(int?x,int?y)?{

return?x?<?n?&&?x?>=?0?&&?y?<?m?&&?y?>=?0?&&?!visit[x][y]?;

}

void?dfs(int?step,?int?x,int?y)?{

if?(step?==?n?*?m)?{

ans?++;?return?;

}

for?(int?d?=?0;?d?<?8;?d?++)?{

int?xx?=?x?+?dx[d],?yy?=?y?+?dy[d]?;

if?(isvalid(xx,yy))?{

visit[xx][yy]?=?1?;

dfs(step?+?1,xx,yy)?;

visit[xx][yy]?=?0?;

}

}

}

int?main()

{

int?T?;

cin?>>?T?;

while?(T?--)?{

memset(visit,0,sizeof(visit))?;

int?x,y?;

cin?>>?n?>>?m?>>?x?>>?y?;

ans?=?0;?visit[x][y]?=?1?;

dfs(1,x,y)?;

printf("%d\n",ans)?;

}

return?0?;

}

簡單的dfs壹下,dx和dy是方向數組,表示馬的8種走法,dfs時判斷每種走法是否在棋盤內且未被訪問過(isvalid函數,visit數組標記是否訪問過),當走過的步數等於m*n即棋盤大小時答案+1。望采納!

  • 上一篇:輕松籌的主要功能是什麽?
  • 下一篇:我的IPAD剛下載了個電視直播軟件,怎麽放不出聲音?為啥什麽?是IPAD提供的免費軟件。HD
  • copyright 2024編程學習大全網