日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ 2458 DFS+判重

發布時間:2025/6/17 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 2458 DFS+判重 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:


思路:
搜+判重 嗯搞定 (聽說有好多人用7個for寫得….)

//By SiriusRen #include <bitset> #include <cstdio>0 using namespace std; bitset<134217728>bit; char s[17][17],vis[17][17],xx[]={1,-1,0,0},yy[]={0,0,1,-1}; int ans; bool check(int x,int y){for(int i=0;i<4;i++){int dx=x+xx[i],dy=y+yy[i];if(dx>=0&&dy>0&&dx<5&&dy<6&&vis[dx][dy])return 1;}return 0; } void dfs(int x,int y,int recj,int rech,int hash){bit[hash]=1;if(recj+rech==7){if(recj>=4)ans++;return;}vis[x][y]=1;for(int i=0;i<5;i++)for(int j=1;j<=5;j++)if(check(i,j)&&!bit[hash|(1<<(i*5+j))]&&!vis[i][j]){if(s[i][j]=='J')dfs(i,j,recj+1,rech,hash|(1<<(i*5+j)));else dfs(i,j,recj,rech+1,hash|(1<<(i*5+j)));}vis[x][y]=0; } int main(){for(int i=0;i<7;i++)for(int j=0;j<7;j++)vis[i][j]=1;for(int i=0;i<5;i++)scanf("%s",s[i]+1);for(int i=0;i<5;i++)for(int j=1;j<=5;j++)vis[i][j]=0;for(int i=0;i<5;i++)for(int j=1;j<=5;j++)if(s[i][j]=='J')dfs(i,j,1,0,1<<(i*5+j));else dfs(i,j,0,1,1<<(i*5+j));printf("%d\n",ans); }

轉載于:https://www.cnblogs.com/SiriusRen/p/6532204.html

總結

以上是生活随笔為你收集整理的POJ 2458 DFS+判重的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。