ACM--HDU 1195 Open the Lock 小BFS

Napoleon_001 2013-04-30 12:47:34
弄了一上午了 总是不对
http://acm.hdu.edu.cn/showproblem.php?pid=1195
题目大意:给出原密码和准确密码,对于原密码每次可以进行三个操作:
1:任意一位+1 且9+1=1
2:任意一位-1 且1-1=9
3:相邻两位互换,且首位和末位不是相邻的。
(密码只有四位数,每个数字1-9) 题目要求原密码变成准确密码的最少步数
我的代码
#include<stdio.h>
#include<string.h>
struct Node
{
char str[5];//每种的字符串
int ti;//每种的移动次数
}dui[6700];//9^4
char pass[5];
int bfs();
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
scanf("%s",dui[0].str);
scanf("%s",pass);
printf("%d\n",bfs());
}
return 0;
}
int bfs()
{
int head,tail,flag,i,j,now;
char tem[12][5],ch;
head=tail=0;
dui[0].ti=0;
tail++;
while(head<tail)
{
now=head++;//出队
for(i=0;i<11;i++)
{
flag=0;
strcpy(tem[i],dui[now].str);
if(i<=2)//临位互换
{
ch=tem[i][i];
tem[i][i]=tem[i][i+1];
tem[i][i+1]=ch;
}
if(i>=3 && i<=6)//+1
{
if(tem[i][i-3]<'9') tem[i][i-3]+=1;
else tem[i][i-3]='1';
}
if(i>=7 && i<=10)//-1
{
if(tem[i][i-7]>'1') tem[i][i-7]-=1;
else tem[i][i-7]='9';
}
if(strcmp(tem[i],pass)==0) return (dui[now].ti+1);
for(j=0;j<now;j++)
{
if(strcmp(tem[i],dui[j].str)==0)
{
flag=1;break;
}
}
if(flag==0)
{
dui[tail].ti=dui[now].ti+1;
strcpy(dui[tail++].str,tem[i]);//入队
// puts(dui[tail-1].str);
}
}
}
return -1;
}

为什么不对啊 快崩溃了
...全文
163 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Napoleon_001 2013-04-30
  • 打赏
  • 举报
回复
真心求 解释
Napoleon_001 2013-04-30
  • 打赏
  • 举报
回复
这只是其中的一个小错误
折翼断JJ 2013-04-30
  • 打赏
  • 举报
回复
引用 6 楼 tyf19938 的回复:
[quote=引用 5 楼 jiweijian123 的回复:] 我这可以啊,哪里不对了。
其他数据 就不对了啊 下面应该是正确的 5 1321 5466 13 6543 1238 11 2154 3893 7 3698 4568 5 1111 9999 4 oj给的结果是 Runtime Error(ACCESS_VIOLATION) [/quote] 确实,两个一样的时候是不对的,显示的是1.
Napoleon_001 2013-04-30
  • 打赏
  • 举报
回复
引用 5 楼 jiweijian123 的回复:
我这可以啊,哪里不对了。
其他数据 就不对了啊 下面应该是正确的 5 1321 5466 13 6543 1238 11 2154 3893 7 3698 4568 5 1111 9999 4 oj给的结果是 Runtime Error(ACCESS_VIOLATION)
折翼断JJ 2013-04-30
  • 打赏
  • 举报
回复
我这可以啊,哪里不对了。
Napoleon_001 2013-04-30
  • 打赏
  • 举报
回复
引用 3 楼 FancyMouse 的回复:
这判重逻辑够野蛮的…… wa么……输入两个相同字符串的话?
一般的测试都会wa 哪儿有问题?
FancyMouse 2013-04-30
  • 打赏
  • 举报
回复
这判重逻辑够野蛮的…… wa么……输入两个相同字符串的话?
Napoleon_001 2013-04-30
  • 打赏
  • 举报
回复

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧