Codevs 2292 图灵机游戏 解题报告

JUMP TO THE PROBLEM

图灵机游戏

说是一道可BFS的题,但待看懂了后发现其实也很简单(刚做这题时我才会BFS,辣鸡地WA掉了,虽然现在我还是很辣鸡)


那就在这里简单地说一下吧,让大家看看我的两种思路:

    1.:由于本题可以看作是从起点 “1”寻找到终点“n”的最短路,也就是一个单源最短路问题,由题我们知道,我们想要扩展点,我们有两种选择,一是跳转至当前点相对的指定点(即存在一条确定边)二是改变一个点相对的指定点(改变边?或是增加边?)听说这道题可以用SPFA解决,但没有用图的解法去做(自己太弱了...),可能之后会补上。

  

    2.BFS:直接丢一个大牛的博客吧,我就是从那里得到经验的,里面解释得很详细,点这里 大牛  。

  

   最后贴上羞耻的代码:


   

#include<queue>
#include<cstdio>
#include<cstring>
#define INF 0x3f3f3f3f
using namespace std;

const int N=1000000+5;

int n;
int a[N];
int dis[N];

queue<int> q;

int main(){

    scanf("%d",&n);
    
    if ( n==1 ){ 
        
        printf("0"); // 只有一个点,不需要操作 
        return 0;
        
    }
    
    for(int i=1;i<=n;i++) scanf("%d",&a[i]); 
    
    memset(dis,INF,sizeof(dis));     
    dis[1]=0;
    dis[a[1]]=1;  // 初始化 
    
    q.push(a[1]);  // 入队第一个扩展点 
    
    while( !q.empty() ){
    
        int num=q.front();
        q.pop();
        
        if ( num==n ) break;
        
        if ( dis[num-1]==INF ) q.push(num-1),dis[num-1]=dis[num]+1;
        
        if ( dis[num+1]==INF ) q.push(num+1),dis[num+1]=dis[num]+1;  
        
        if ( a[num]!=num-1 && a[num]!=num+1 && dis[a[num]]==INF ) q.push(a[num]),dis[a[num]]=dis[num]+1;   
    
    }
    
    printf("%d",dis[n]);
         
  return 0;

}

    我在怀疑我是不是只能看题姐才能做题,但这也太弱了吧(虽然本来就是) 。

 

    2017.1.28

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 是一种流行的编程语言,它可以用于构建各种类型的应用程序,包括图灵机图灵机是一种理论模型,用于描述计算和自动化。它由英国数学家艾伦·图灵提出,被认为是计算机科学的重要基础。 在 Python 中,你可以使用基本的编程概念和数据结构来模拟图灵机的行为。例如,你可以使用条件语句、循环和变量来控制图灵机的状态转移和符号操作。你可以通过定义状态集合、符号集合、转移函数和停机状态来实现图灵机的功能。 以下是一个简单的 Python 代码示例,模拟了一个简化的图灵机: ```python # 定义图灵机的状态集合 states = {'q0', 'q1'} # 定义图灵机的符号集合 symbols = {'0', '1'} # 定义转移函数 transitions = { ('q0', '0'): ('q1', '1', 'R'), ('q1', '1'): ('q0', '0', 'L'), ('q1', '0'): ('q1', '1', 'R') } # 定义初始状态和输入串 initial_state = 'q0' input_string = '000111' # 初始化图灵机 current_state = initial_state tape = list(input_string) head_position = 0 # 模拟图灵机运行 while current_state != 'q1': symbol = tape[head_position] if (current_state, symbol) not in transitions: raise Exception('No transition defined for current state and symbol') new_state, new_symbol, move = transitions[(current_state, symbol)] tape[head_position] = new_symbol if move == 'R': head_position += 1 elif move == 'L': head_position -= 1 current_state = new_state # 输出最终的结果 output_string = ''.join(tape) print('Output:', output_string) ``` 请注意,这只是一个简化的示例,实际的图灵机可能更加复杂。在实际应用中,你可能需要使用更高级的编程技术和库来处理更复杂的图灵机模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值