首页 > 代码库 > ShellSort UVA 10152
ShellSort UVA 10152
说说:
题意大概就是开始有一堆的字符串堆栈A,其中的任何一个字符串都可以从当前位置移动到栈顶,经过若干字符串的移动,最后形成了另一个字符串堆栈B,要求输出按顺序输出移动字符串最少的移动方案。其实解法挺简单的,既然要求的是最少的移动,那么就从B的底部开始逐个在A中从底部往上查找,并且要在A中标记查找位置,因为A中已经被查找过的字符串必然是要移动的。如此重复,直到B在原堆栈中找不到可以不移动的字符串。最后,B中剩下的都是移动过的字符串。因为字符串只能移动到顶部,因此从B中的当前位置逐个向顶部输出字符串,就是所求的结果啦。
源代码:
#include <stdio.h> #include <string.h> #define MAXN 200+5 #define MAXL 80+5 int main(){ char origin[MAXN][MAXL],now[MAXN][MAXL]; int T,n,i,p; // freopen("data","r",stdin); scanf("%d",&T); while(T--){ scanf("%d\n",&n); for(i=0;i<n;i++) gets(origin[i]); for(i=0;i<n;i++) gets(now[i]); for(i=p=n-1;i>=0&&p>=0;){//p标记原堆栈的位置,i标记当前堆栈的位置 while(p>=0) if(strcmp(now[i],origin[p])==0){ p--; i--;//i的递减最好放在内部,否则可能会少输出一个字符串 break; } else p--; } for(;i>=0;i--) printf("%s\n",now[i]); putchar('\n'); } return 0; }
ShellSort UVA 10152
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。