练习1 - LETTERS

#include <iostream>  
#include <cstdio>  
#include <cstdlib>  
#include <cmath>  
#include <cstring>  
#include <string>  
#include <queue>  
#include <algorithm>  
using namespace std;  
string s;	//存储已走过的字符 
int maxA=1;
const int row = 3;
const int col = 6;
char a[4][7]={
	{'A','A','A','A','A','A','A'},
	{'A','H','F','D','F','F','B'},
	{'A','A','J','H','G','D','H'},
	{'A','D','G','A','G','E','H'},
};

void skip(int h,int w,int n){
	bool flag = true;
	if(h-1>=1 && s.find(a[h-1][w]) == string::npos){	//上移 
		flag = false;	//还没走到最后1步 
		s+= a[h-1][w];
		skip(h-1,w,n+1);	//2.搜索 
		s.erase(s.end() - 1);	//3.回溯 
	}
	if(h+1<=row && s.find(a[h+1][w]) == string::npos){	//下移 
		flag = false;	//还没走到最后1步 
		s+= a[h+1][w];
		skip(h+1,w,n+1);	//2.搜索 
		s.erase(s.end() - 1);	//3.回溯 
	}
	if(w-1>=1 && s.find(a[h][w-1]) == string::npos){	//左移 
		flag = false;	//还没走到最后1步 
		s+= a[h][w-1];
		skip(h,w-1,n+1);	//2.搜索 
		s.erase(s.end() - 1);	//3.回溯 
	}
	if(w+1<=col && s.find(a[h][w+1]) == string::npos){	//右移 
		flag = false;	//还没走到最后1步 
		s+= a[h][w+1];
		skip(h,w+1,n+1);	//2.搜索 
		s.erase(s.end() - 1);	//3.回溯 
	}
	if(flag) maxA = n > maxA ? n : maxA;	//走到最后1步,比较大小 
	
}

int main()  
{
    //流程图:分析 >> 敲码    ->    !不要用战术上的勤奋掩盖战略上的懒惰! 
    s += a[1][1];
	skip(1,1,1);	//坐标从(1,1)开始且其实已经有1个 
	cout << maxA;
    return 0;
} 

//cout << "输入";  

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值