问题标题: 酷町堂:5012

0
0
已解决
李思远
李思远
中级守护
中级守护
#include<iostream>
#include<cstring>
#include<cmath>
#include<string>
#include<cstdio>
using namespace std;
int a[30],used[30],n,r;
void dfs(int t){
	for(int i=1;i<=n;i++)
	{
		if(used[i]==0)
		{
			a[t]=i;
			used[i]=1;
			dfs(t+1);
			used[i]=0;
		}
	}
	if(t==r)
	{
		for(int i=1;i<=r;i++)
			cout<<a[i]<<" ";
		cout<<"\n";
		return ;
	}
}
int main()
{
	cin>>n>>r;
	dfs(1);
    return 0;
}

为啥错?

李思远在2020-04-22 21:38:07追加了内容

介个……

李思远在2020-05-01 20:37:36追加了内容

咳咳,发错了,是这个

#include<iostream>
#include<cstring>
#include<cmath>
#include<string>
#include<cstdio>
using namespace std;
char map[20][20]; 
int vis[20][20],n,m,fx,fy;
int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
void dfs(int x,int y,int t){
	if(x==fx&&y==fy)
	{
		cout<<t;
		return ;
	}
	for(int i=0;i<=3;i++)
	{
		int nx=x+dir[i][0];
		int ny=y+dir[i][1];
		if(map[nx][ny]=='.'&&nx>=1&&nx<=n&&ny>=1&&ny<=m&&vis[nx][ny]==0)
		{
			vis[nx][ny]=1;
			dfs(nx,ny,t+1);
		}
	}
}
int main()
{
	int sx,sy;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>map[i][j];
			if(map[i][j]=='S')
			{
				sx=i;
				sy=j;
			}
			else if(map[i][j]=='T')
			{
				fx=i;
				fy=j;
			}
		}
	}
	vis[sx][sy]=1;
	dfs(sx,sy,1);
    return 0;
}

 

李思远在2020-07-08 20:11:50追加了内容

谁来回答呀!!!


0
已采纳
徐子玄
徐子玄
初级光能
初级光能

最小步数!!

if(x==fx&&y==fy)
{
    cout<<t;
    return ;
}
改为
if(x==fx && y==fy) {
    if(mn>t)
        mn=t;
    ans++;
    return ;
}

最后在

vis[sx][sy]=1;
dfs(sx,sy,1);
后加
if(ans!=0)
    cout << mn;
else cout<<-1;
即可AC!!

望采纳!! 

0
0
0
王子健
王子健
初级天翼
初级天翼

你确定是5012?不是5014?

0
0
0
0
0
0
0
我要回答