經典c程式(0038)---矩陣中兩點最短距離BFS
/************************************************************************************** * Function : test * Create Date : 2014/07/13 * Author : NTSK13 * Email : [email protected] * Copyright : 歡迎大家和我一起交流學習,轉載請保持原始檔的完整性。 任何單位和個人不經本人允許不得用於商業用途 * Version : V0.1 *************************************************************************************** 經典c程式(0038) ---矩陣中兩點最短距離BFS 題目:10 * 10 矩陣 。0為牆, 1為通道, 2 為起點 ,3 為終點, 求七點到終點最短距離,單位為1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 0 0 2 0 0 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 0 0 0 0 1 0 1 0 1 1 1 1 0 0 1 0 1 1 0 0 1 1 3 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 **************************************************************************************/ #include <stdio.h> #define M 10 int data[M][M]; typedef struct{ int x; int y; int level; }Pos; Pos start,end; int offset[4][2]={-1,0,0,1,1,0,0,-1}; int mark[M][M]; int get_length(Pos start); /****************************************************************************************/ typedef struct{ Pos store[M*M]; int head; int tail; }Queue; void init_queue(Queue *A) { (*A).head=-1; (*A).tail=-1; } int in_queue(Queue *A, Pos val) { if( (*A).tail == M*M-1 )//full return (0); (*A).store[ ++(*A).tail]=val; return (1); } int out_queue(Queue *A, Pos * val) { if( (*A).head==-1 && (*A).tail==-1)//empty return (0); *val=(*A).store[ ++(*A).head]; return (1); } Queue B; /****************************************************************************************/ int main(void) { int tc=0, T=0,th=0; // The freopen function below opens input.txt file in read only mode, and afterward, // the program will read from input.txt file instead of standard(keyboard) input. // To test your program, you may save input data in input.txt file, // and use freopen function to read from the file when using scanf function. // You may remove the comment symbols(//) in the below statement and use it. // But before submission, you must remove the freopen function or rewrite comment symbols(//). freopen("input.txt", "r", stdin); // If you remove the statement below, your program's output may not be rocorded // when your program is terminated after the time limit. // For safety, please use setbuf(stdout, NULL); statement. setbuf(stdout, NULL); scanf("%d", &T); for(tc = 0; tc < T; tc++) { /**********************************/ int i=0,j=0,ret=0; scanf("%d", &th); /******************************************************************/ for(i=0;i<M;i++) for(j=0;j<M;j++) { scanf("%d",&data[i][j]); mark[i][j]=0; if(data[i][j]==2) { start.x=i; start.y=j; } if(data[i][i]==3) { end.x=i; end.y=j; } } ret=get_length(start); /******************************************************************/ printf("#%d %d\n",th,ret); fflush(stdout);//修復Eclipse printf()不能顯示的小bug // Print the answer to standard output(screen). } return (0);//Your program should return 0 on normal termination. } int get_length(Pos start) { int x=0,y=0,level=0,tx=0,ty=0,tlevel=0,k=0,ret=0; Pos tmp; start.level=0; init_queue(&B);//初始化佇列 in_queue(&B,start);//初始化原點,原點進棧 mark[start.x][start.y]=1; while( B.head != B.tail) //while(1) { out_queue(&B,&tmp); x=tmp.x; y=tmp.y; level=tmp.level;//出棧 if(x==end.x && y==end.y) { ret=tmp.level; break; } for(k=0;k<4;k++) { tx=x+offset[k][0]; ty=y+offset[k][1]; tlevel=level+1; if( tx>=0 && tx<M && ty>=0 && ty<M && mark[tx][ty]==0 ) { if( data[tx][ty]==1 || data[tx][ty]==3)//入棧 { tmp.x=tx; tmp.y=ty; tmp.level=tlevel; in_queue(&B,tmp); } mark[tx][ty]=1; } } } return ret; }
相關推薦
經典c程式(0038)---矩陣中兩點最短距離BFS
/************************************************************************************** * Function : test * Create Date : 2014/07/13
牛客練習賽14 E-無向圖中的最短距離(bfs+bitset)
連結:https://www.nowcoder.com/acm/contest/82/E來源:牛客網題目描述 有一個n個點的無向圖,有m次查詢,每次查詢給出一些(xi,yi) 令dist(x,
329 Longest Increasing Path in a Matrix 矩陣中的最長遞增路徑
can you 遞增 c++ direct log integer ret pre Given an integer matrix, find the length of the longest increasing path.From each cell, you can
求圖中兩點最短路徑(dijkstra) go實現
import ( "testing" "strconv" "fmt" ) // V - S = T type Dijkstra struct { Visit bool // 表示是否訪問 Val int // 表示距離 Path string // 路徑的顯示 }
隨機矩陣中尋找最大元素值
1.問題描述 產生一個M*N的隨機數矩陣(數值範圍在1~100之間),找出其中的最大值元素。 2.程式設計分析 這裡的隨機矩陣產生可以用隨機函式rand()來產生,然後定義一個變數max,初值為0,接著遍歷陣列當遇到比max大的元素值時,把
C/C++ 求三個數中的最大數(簡單方法,一步到位)
#include <iostream> using namespace std; int max_3(int a, int b, int c) { return a > b ? (
leetcode 矩陣中的最長遞增路徑 python【動態規劃】
題目描述 **分析:**假設最長路徑終點的是[i][j],則其最長路徑值為nums1[i][j],則nums1[i][j]等於它上下左右四個數中,比它小的數中最長路徑值最大的那一個+1 因此,我們可以從矩陣的最小值出發,其最長路徑值為1,然後計算第二小的數的最長路徑值,以此類推 cla
尋找01矩陣中的最大子矩陣--華為OJ機試--java語言版
題目描述: 在一個M * N的矩陣中,所有的元素只有0和1,從這個矩陣中找出一個面積最大的全1子矩陣,所謂最大是指元素1的個數最多。 輸入: 輸入可能包含多個測試樣例。 對於每個測試案例,輸入的第一行
[LeetCode] Longest Increasing Path in a Matrix 矩陣中的最長遞增路徑
Given an integer matrix, find the length of the longest increasing path. From each cell, you can either move to four directions: left, right, up or down
(LeetCode 329)矩陣中的最長遞增路徑 [簡單DP & 公式:dp[x][y] = dp[xx][yy] + 1]
329. 矩陣中的最長遞增路徑 給定一個整數矩陣,找出最長遞增路徑的長度。 對於每個單元格,你可以往上,下,左,右四個方向移動。 你不能在對角線方向上移動或移動到邊界外(即不允許環繞)。 示例 1: 輸入: nums = [ [9,9,4], [6,6,8], [2,1,1]
Leetcode 329.矩陣中的最長遞增路徑
矩陣中的最長遞增路徑 給定一個整數矩陣,找出最長遞增路徑的長度。 對於每個單元格,你可以往上,下,左,右四個方向移動。 你不能在對角線方向上移動或移動到邊界外(即不允許環繞)。 示例 1: 輸入: nums = [ [9,9,4], [6,6,8], [2,1,1] ]
藍橋杯 (在矩陣中擺放最多的馬相互不攻擊)
蒜頭君喜歡下棋。最近它迷上了國際象棋。國際象棋的棋盤可以被當做一個 8\times 88×8 的矩陣,棋子被放在格子裡面(不是和中國象棋一樣放在線上)。蒜頭君特別喜歡國際象棋裡面的馬,馬的移動規則是這樣
[Swift]LeetCode329. 矩陣中的最長遞增路徑 | Longest Increasing Path in a Matrix
diag dir pty sem path 邊界 xpl ng-bind NPU Given an integer matrix, find the length of the longest increasing path. From each cell, you ca
每日一練——矩陣中的最大遞增路徑
題目描述: Given an integer matrix, find the length of the longest increasing path. From each cell, you can either move to four directions: l
經典c程式(0019)----求分數數列的前20項之和
/************************************************************************************** * Function
LeetCode 329. 矩陣中的最長遞增路徑
給定一個整數矩陣,找出最長遞增路徑的長度。 對於每個單元格,你可以往上,下,左,右四個方向移動。 你不能在對角線方向上移動或移動到邊界外(即不允許環繞)。 示例 1: 輸入: nums = [ [9,9,4], [6,6,8], [2,1,1] ]
leetcode 85 Maximal Rectangle 在矩陣中找最大的矩形
題目:Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area.Example:Input: [
20.找出N*N矩陣中列最大值並輸出
給定程式中,函式fun的功能是:找出N*N矩陣中每列元素中的最大值,並按照順序依次存放於形參b所指的一維陣列中。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #define N 4 void fun(i
c# 求10個數中的最大最小值
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program
求平面兩點最短距離minimum distance
Problem description Given N(2<=N<=100,000) points on the plane, find the nearest two points, print the minimum distance. Input Line 1: a