3 条题解

  • 4
    @ 2023-8-3 16:28:02

    史上最长代码:

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        cout << "1:0,0->2,1->4,2->3,4->4,6->2,7->4,8\n2:0,0->2,1->4,2->3,4->1,5->3,6->4,8\n3:0,0->2,1->4,2->3,4->1,5->2,7->4,8\n4:0,0->2,1->4,2->2,3->4,4->3,6->4,8\n5:0,0->2,1->4,2->2,3->4,4->2,5->4,6->2,7->4,8\n6:0,0->2,1->4,2->2,3->4,4->2,5->0,6->2,7->4,8\n7:0,0->2,1->4,2->2,3->3,5->2,7->4,8\n8:0,0->2,1->4,2->2,3->1,5->3,6->4,8\n9:0,0->2,1->4,2->2,3->1,5->2,7->4,8\n10:0,0->2,1->4,2->2,3->0,4->2,5->4,6->2,7->4,8\n11:0,0->2,1->4,2->2,3->0,4->2,5->0,6->2,7->4,8\n12:0,0->2,1->3,3->2,5->4,6->2,7->4,8\n13:0,0->2,1->3,3->2,5->0,6->2,7->4,8\n14:0,0->2,1->3,3->1,4->3,5->2,7->4,8\n15:0,0->2,1->3,3->1,4->0,6->2,7->4,8\n16:0,0->2,1->1,3->3,4->4,6->2,7->4,8\n17:0,0->2,1->1,3->3,4->1,5->3,6->4,8\n18:0,0->2,1->1,3->3,4->1,5->2,7->4,8\n19:0,0->2,1->1,3->2,5->4,6->2,7->4,8\n20:0,0->2,1->1,3->2,5->0,6->2,7->4,8\n21:0,0->2,1->0,2->2,3->4,4->3,6->4,8\n22:0,0->2,1->0,2->2,3->4,4->2,5->4,6->2,7->4,8\n23:0,0->2,1->0,2->2,3->4,4->2,5->0,6->2,7->4,8\n24:0,0->2,1->0,2->2,3->3,5->2,7->4,8\n25:0,0->2,1->0,2->2,3->1,5->3,6->4,8\n26:0,0->2,1->0,2->2,3->1,5->2,7->4,8\n27:0,0->2,1->0,2->2,3->0,4->2,5->4,6->2,7->4,8\n28:0,0->2,1->0,2->2,3->0,4->2,5->0,6->2,7->4,8\n29:0,0->2,1->0,2->1,4->3,5->2,7->4,8\n30:0,0->2,1->0,2->1,4->0,6->2,7->4,8\n31:0,0->1,2->3,3->2,5->4,6->2,7->4,8\n32:0,0->1,2->3,3->2,5->0,6->2,7->4,8\n33:0,0->1,2->3,3->1,4->3,5->2,7->4,8\n34:0,0->1,2->3,3->1,4->0,6->2,7->4,8\n35:0,0->1,2->2,4->3,6->4,8\n36:0,0->1,2->0,4->2,5->4,6->2,7->4,8\n37:0,0->1,2->0,4->2,5->0,6->2,7->4,8";
        return 0;
    }
    
  • 1
    @ 2023-5-27 9:11:05
    #include<iostream>
    using namespace std;
    int n,m,sum;
    struct data{
    	int p,q;
    }a[110];
    int dx[4]={2,1,-1,-2};
    int dy[4]={1,2,2,1};
    int g[110][110];
    void dfs(int x,int y,int u)
    {
    	if(x==4&&y==8)
    	{
    		a[u].p=x;
    		a[u].q=y;
    		sum++;
    		cout<<sum<<":"<<a[1].p<<","<<a[1].q;
    		for(int i=2;i<=u;i++)
    			cout<<"->"<<a[i].p<<","<<a[i].q;
    		cout<<endl;
    		return ;
    	}
    	a[u].p=x;
    	a[u].q=y;
    	g[x][y]=1;
    	for(int i=0;i<4;i++)
    	{
    		int xx=x+dx[i],yy=y+dy[i];
    		if(xx>=0&&yy>=0&&xx<=4&&yy<=8&&!g[xx][yy])
    		{
    			dfs(xx,yy,u+1);
    			g[x][y]=0;
    		}
    	}
    } 
    int main(){
    	dfs(0,0,1);
    	return 0;
    }
    /*
    bfs是一层层开始扫荡
    dfs是一条道走到黑
    求方案数,走完了一条返回接着走 
    dfs的参数一定要确定好 
    */
    

    方法2

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,cnt=1;
    int a[2][10];
    void dfs(int x,int y,int len,int a[][10]){
    	a[0][len]=x;
    	a[1][len]=y;
    	if(x>n||y>m||x<0||y<0)
    	return;
    	else if(x==n&&y==m){
    		cout<<cnt<<":";
    		cnt++;
    		for(int i=0;i<=len;i++){
    			if(i==len)
    			printf("%d,%d\n",a[0][i],a[1][i]);
    			else
    			printf("%d,%d->",a[0][i],a[1][i]);
    		}
    		return;
    	}
    	dfs(x+2,y+1,len+1,a);
    	dfs(x+1,y+2,len+1,a);
    	dfs(x-1,y+2,len+1,a);
    	dfs(x-2,y+1,len+1,a);
    }
    int main()
    {
    	//cin>>n>>m;
    	n=4,m=8;
    	dfs(0,0,0,a);
    	return 0;
    }
    
    
    • 0
      @ 2022-9-8 18:54:24

      这道题本是一道简简单单的深搜,但是这道题的图去哪了?我咋没看到??

      好吧,没图也没关系。题目中说从左下角往右上角跳,只能向右跳,顺时针顺序。那我们把它转化成:从左上角向右下角跳,只能向右跳,逆时针顺序。这下就好解决了。最后用一个数组记录路径即可。

      核心代码:

      int cnt,path[50][2];//path[i][0]表示第i步的行号,path[i][1]表示第i步的列号
      bool vis[5][9];
      const int dx[]={2,1,-1,-2};
      const int dy[]={1,2,2,1};
      void dfs(int x,int y,int d){
          path[d][0]=x,path[d][1]=y;
          if (x==4&&y==8){
              cnt++;
              printf("%d:",cnt);
              for (int i=1;i<d;i++){
                  printf("%d,%d->",path[i][0],path[i][1]);
              }
              printf("%d,%d\n",path[d][0],path[d][1]);
              return;
          }
          vis[x][y]=1;
          for (int i=0;i<4;i++){
              int nx=x+dx[i];
              int ny=y+dy[i];
              if (nx>=0&&nx<=4&&ny<=8&&!vis[nx][ny]){
                  dfs(nx,ny,d+1);
              }
          }
          vis[x][y]=0;
      }
      
      • 1

      信息

      ID
      359
      时间
      1000ms
      内存
      16MiB
      难度
      2
      标签
      递交数
      118
      已通过
      70
      上传者