2017.5.8 文化之旅 思考记录
来源:互联网 发布:黑白网络 编辑:程序博客网 时间:2024/06/16 13:55
这个题就是搜索+剪枝,,但有一些剪枝的方法是值得借鉴的:
1、最优性剪枝:
①当前答案 与 当前距离的比较
②当前距离+最短路 与 当前答案的比较
2、可行性剪枝:
①终点肯定要走,与终点相斥或相同的都直接剪掉
3、玄学卡过:
一般出题人卡正搜但不卡倒搜,所以一般搜索题倒搜或双向搜。。
码:
#include<iostream>#include<cstdio> using namespace std;#include<cstring>int n,k,m,s,t,tu[150][150],ans=1e9,wh[150],xue[150],i,j,x,y,z,xia[150][150];bool zou[150],dui[150][150];void dfs(int now,int juli){ if(juli>=ans)return; if(now==s) { ans=min(ans,juli); return ; } int i,j;bool keyi; for(i=1;i<=n;i++) { if(tu[now][i]>1e7||zou[i]||xue[wh[i]])continue; keyi=1; for(j=1;j<=k;j++)if(dui[i][j]&&xue[j]){keyi=0;break;} if(!keyi)continue; xue[wh[i]]++; zou[i]=1; dfs(i,juli+tu[now][i]); xue[wh[i]]--; zou[i]=0; } }int main(){ scanf("%d%d%d%d%d",&n,&k,&m,&s,&t); for(i=1;i<=n;i++)scanf("%d",&wh[i]); memset(tu,0x7f,sizeof(tu)); for(i=1;i<=k;i++) for(j=1;j<=k;j++) cin>>dui[i][j]; for(i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&z); tu[x][y]=tu[y][x]=min(tu[x][y],z); } for(i=1;i<=k;i++)for(j=1;j<=k;j++){if(dui[i][j])dui[j][i]=1;} zou[t]=1; xue[wh[t]]=1; dfs(t,0); if(ans==1e9)printf("-1"); else printf("%d",ans);}
0 0
- 2017.5.8 文化之旅 思考记录
- culture文化之旅
- 文化之旅
- [noip2012pj] 文化之旅
- 【BFS】 文化之旅
- P1078 文化之旅
- 文化之旅
- 文化之旅
- P1078 文化之旅
- 游戏中的文化思考
- 文化价值观思考
- NOIP2012P4 文化之旅 题解
- Vijos P1794 文化之旅
- 洛谷 P1078 文化之旅
- 洛谷 P1078 文化之旅
- 【原创】【NOIP】文化之旅
- 算法提高 文化之旅
- 洛谷 P1078 文化之旅
- Code::Blocks添加第三方库
- 卷积神经网络初学者指南
- java IO(输入输出) 字节流
- LeetCode 205. Isomorphic Strings 双map ***
- hdu 2196(Computer 树形dp)
- 2017.5.8 文化之旅 思考记录
- java微信公众号开发
- Java内部类
- Android APM方案(一)完成代码注入
- 指针和变量
- 删除docker中的容器
- 网络流(模版+例题)
- 手写实现HashMap代码
- ZOJ 1001