回形取數
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
Sample Output
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); } }