poj 1033 文件移动
来源:互联网 发布:淘宝腰脱九块九包官网 编辑:程序博客网 时间:2024/05/18 01:51
题意:磁盘n个块,有m个文件,各自被分割成许多块分散在磁盘之中,要求通过最少移动次数使得第1个文件的占1,2,3...f1块,第二个文件占f1+1,f1+2...f1+f2块。。。
思路:dfs(k)为将第k位置填好。
#include <cstdio>#include <cstring>#include <algorithm>#include <set>using namespace std;#define N 10005int n,m;int hh[N],s[N],len = 0,used[N];int f;int dfs(int i){ used[i] = 1; if(!s[i]){ printf("%d %d\n",hh[i],i); if(f == i) f = hh[i]; s[hh[i]] = 0; s[i] = i; hh[i] = i; return false; } if(used[s[i]]){ //遇到环 printf("%d %d\n",i,f); hh[s[i]] = f; s[f] = s[i]; s[i] = 0; f = i; return true; }else{ int ans = dfs(s[i]); //ans为真表示遇到环 if(ans){ //遇到环,那么当前的文件移动到他该去的地方 printf("%d %d\n",i,s[i]); if(f==s[i]) f = i; hh[s[i]] = s[i]; s[s[i]] = s[i]; s[i] = 0; }else{ printf("%d %d\n",hh[i],i); //如果不是环,那么是该放到当前位置的文件放过来(类似第一个分支) if(f == i) f = hh[i]; s[hh[i]] = 0; s[i] = i; hh[i] = i; } return ans; }}int main(){ int i,j,k,x; while(scanf("%d %d",&n,&k)!=EOF){ memset(s, 0, sizeof(s)); memset(hh, 0, sizeof(hh)); len = 0; while(k--){ scanf("%d",&j); for(i = 0;i<j;i++){ scanf("%d",&x); hh[++len] = x; s[x] = len; } } for(i = n;i>=1;i--)//找一个空白的位置 if(!s[i]){ f = i; break; } for(i = 1;i<=len;i++)//看看是不是每个位置都放好了 if(s[i] != i) break; if(i == len+1) printf("No optimization needed\n"); else{ for(int i = 1;i<=len;i++) if(s[i] != i){ memset(used, 0, sizeof(used)); if(dfs(i)) i--; } } } return 0;}
0 0
- poj 1033 文件移动
- 移动文件
- 移动文件
- 文件移动
- 移动文件
- 文件移动
- 移动文件
- poj 3717: 移动路线
- poj 1915 bfs(骑士移动)
- 批量移动文件(八)
- 移动Oracle控制文件
- fseek() 移动文件指针
- shell 移动文件
- java移动文件
- nodejs移动文件
- 移动文件(夹):move
- 移动文件指针细节
- java移动处理文件
- xss的那些有卵用和没有卵用(一)
- Android 的性能 V-保持APP的响应
- LeetCode 2015.7.27 64,62,59,466,48,53,113,16
- (0)Leap Motion简介
- LeetCode 2015.7.28-2015.8.3 50,49,55,120,199,63,40
- poj 1033 文件移动
- LeetCode 2015.8.6 17,216,131,215,230,34,92
- LeetCode 2015.8.7 173,75,39,78,82,90,103
- 常用的消息摘要算法小总结
- USACO Transformations 解题日志
- LeetCode 2015.8.8-2015.8.14 240,222,3,54,61,242,179,43,227
- LeetCode 2015.9.28-2015.10.5 234,283,263,260,268,51,52
- LeetCode 2015.10.6 287,41,154,117,128,33,81,72,138,133,164
- 【JavaScript】对象的操作