藍橋杯 java 回形取數

回形取數

Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 39  Solved: 8 [Submit][Status][Web Board]

Description

回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。 

Input

輸入第一行是兩個不超過200的正整數m,  n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。

Output

輸出只有一行,共mn個數,爲輸入矩陣回形取數得到的結果。數之間用一個空格分隔,行末不要有多餘的空格。

Sample Input

3 3 1 2 3 4 5 6 7 8 9

Sample Output

1 4 7 8 9 6 3 2 5

HINT

請關注微信公衆號onlinejudge

Source

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;  
      
    public class Main{   
    	static int f[][],vis[][];
    	static int n,m,ans;
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
             n=in.nextInt();
             m=in.nextInt();
             
            f=new int[n+5][m+5];
            vis=new int[n+5][m+5];
            for(int i=0;i<n;i++){
            	for(int j=0;j<m;j++){
            		f[i][j]=in.nextInt();
            		//System.out.println("*");
            	}
            }
           
            ans=0;
            col1(-1,0);
            System.out.println();
            
        }
		private static void col1(int row,int col) {
			// TODO Auto-generated method stub
			int i;
			for( i=row+1;i<n;i++){
				if(vis[i][col]==1)break;
				vis[i][col]=1;
				ans++;
				System.out.print(f[i][col]);
				if(ans<n*m)System.out.print(" ");
				else return ;
			}
			
			row1(i-1,col);
		}
		private static void row1(int row,int col) {
			// TODO Auto-generated method stub
			int i;
			for(i=col+1;i<m;i++){
				if(vis[row][i]==1)break;
				vis[row][i]=1;
				ans++;
				System.out.print(f[row][i]);
				if(ans<n*m)System.out.print(" ");
				else return ;
			}
			col2(row,i-1);
		}
		private static void col2(int row, int col) {
			// TODO Auto-generated method stub
			int i;
			for( i=row-1;i>=0;i--){
				if(vis[i][col]==1)break;
				vis[i][col]=1;
				ans++;
				System.out.print(f[i][col]);
				if(ans<n*m)System.out.print(" ");
				else return;
			}
			
			row2(i+1,col);
		}
		private static void row2(int row, int col) {
			// TODO Auto-generated method stub
			int i;
			for(i=col-1;i>=0;i--){
				if(vis[row][i]==1)break;
				vis[row][i]=1;
				ans++;
				System.out.print(f[row][i]);
				if(ans<n*m)System.out.print(" ");
				else return;
			}
			col1(row,i+1);
		}
		
		
		  
 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章